【问题标题】:Key exists error while using ADD into Couchbase使用 ADD 到 Couchbase 时出现键存在错误
【发布时间】:2014-03-24 13:37:16
【问题描述】:

我正在使用 Couchbase NoSQL DB,但我想这可能发生在任何 NoSQL DB 上。以下是发生的事情:

我正在检查是否存在特定密钥,并且我正在捕获 keyNotFound 错误,现在将此密钥添加到数据库中。见代码:

// retrieve the document for this connection_id
db.get(connection_id, function(err, result) {
if (err && err.code === 13) {   
// Catched a keyNotFound -> define a new document for the voice connection
var voice_c = {
        voice_count: '1',
            voice_duration: call_duration,
    last_contact: call_start
};
// Add this new Voice_c document for this connection_id to DB
db.add(connection_id, voice_c, function(err, result) {
        if (err)
        throw err; // whilst adding a new voice connection
});

当我进入 db.add 步骤时,我得到一个错误“密钥存在(具有不同的 CAS 值)”,即使我只是在之前检查了一毫秒的片段是否存在相同的密钥(并且它不存在) .

我无法在数据馈送中的同一位置复制错误,但第二次发生的时间更早,表明这是随机事件。我很困惑这怎么会发生,除非我的代码中有一个我看不到的大错误。

没有其他代码在运行和更改 NoSQL DB 中的文档,它们都在我的 MBP 上本地运行。在我开始运行我的脚本之前,数据库被刷新并且是空的。

我在数据馈送中手动检查过,当它第一次发生时,确实存在相同的 connection_id 大约 50 条记录。但是在第二种情况下,当第一次出现 connection_id 时抛出了错误(尽管后来出现了大约 19000 条记录)。很奇怪,希望有人能帮助我如何避免出现这个错误。

【问题讨论】:

  • 您是否尝试过只使用add 而没有get?在这种情况下获取是没有用的,因为add 不会将文档存储在数据库中。
  • @m03geek 我省略了找到密钥的部分的代码(大部分时间都在发生)以及我更新文档中的数字的部分。因此,尽管我同意您对上面代码 sn-p 的看法,但在这种情况下 GET 并不是无用的。

标签: node.js nosql couchbase


【解决方案1】:

您是否尝试过使用 couchbase 的“stale:false”选项来更新索引?我还建议对这两个语句都使用 async.waterfall,它增加了可读性并减少了回调地狱。

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2014-08-16
    • 1970-01-01
    • 2018-03-12
    • 2020-04-22
    相关资源
    最近更新 更多