将ADD用于Couchbase时,密钥存在错误

时间:2014-03-24 13:37:17

标签: node.js nosql couchbase

我使用的是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值)"即使我之前检查过相同的密钥(并且它不存在),我只是检查了一毫秒的碎片。

我无法在数据Feed中的同一位置复制错误,但第二次更早发生错误,表明它是一个随机事件。我很困惑,除非我的代码中存在一个我不知道的错误,否则会发生这种情况。

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

我已经在数据Feed中手动检查了它,并且在第一次确实发生了大约50个记录之前确实存在相同的connection_id时。但是在第二个实例中,当connection_id第一次出现时抛出了错误(虽然它稍后出现了大约19000个记录)。非常奇怪,希望有人能帮助我如何避免这个错误。

1 个答案:

答案 0 :(得分:0)

你有没有尝试使用" stale:false"用于更新索引的couchbase选项?我还建议对两个语句使用async.waterfall,它会增加可读性并减少回调地狱。