就我而言$inc修饰符不是并发的mongodb?我可以做些什么来使其并发吗?



我有一个简单的$inc也{upsert: true}.这意味着如果它不存在,它应该创建它。

我每天接到超过一百万个这样的电话。它通常工作正常。但是我不时看到有两个文档使用相同的参数创建。这意味着并发性存在问题。

我可以做些什么来使其并发吗?

根据下面的堆栈溢出答案,它应该是并发的。 $inc修饰符如何处理 mongodb 中的并发请求?

问题是它不是我做的。

虽然$inc是原子的,但当需要插入文档时,更新插入不是原子的。

因此,您需要做的是向集合添加一个唯一索引,该索引涵盖要更新插入的字段,然后处理重复键异常以从意外重复中恢复。

关于该主题的另一个答案中的一个例子:

var minute = utils.minute();
Monitor.update({ _id: minute }, { $inc: update }, { upsert: true }, function(err) {
if (err) {
if (err.code === 11000) {
// Another upsert occurred during the upsert, try again. You could omit the
// upsert option here if you don't ever delete docs while this is running.
Monitor.update({ _id: minute }, { $inc: update }, { upsert: true },
function(err) {
if (err) {
console.trace(err);
}
});
}
else {
console.trace(err);
}
}
});

相关内容

  • 没有找到相关文章

最新更新