以原子方式更新多个文档

时间:2015-04-03 23:26:24

标签: node.js mongodb atomicity

在mongodb中,我有以下命令来更新一堆文件

我正在为Node.js使用mongodb-native驱动程序:

champion_statistics.bulkWrite([
    {updateOne: {filter: {id: 1}, update: {$inc: {sum: 2}}, upsert: false}},
    {updateOne: {filter: {id: 2}, update: {$inc: {sum: 5}}, upsert: false}}
], {
    ordered: false
}, function(err, res){
    //done
});

然而,当我进行读取时,我发现集合处于第一个操作完成但不是第二个操作的状态。我能做些什么来使多个更新原子化吗?

1 个答案:

答案 0 :(得分:1)

没有。在MongoDB中,操作仅在单个文档的级别上是原子的。影响多个文档的多个更新或更新始终有可能在文档更改之间产生,从而允许“中间状态”读取发生。通常,在可行的范围内,原子性要求内置于文档设计中。除此之外,应用程序还要强制执行其原子性要求。查看2-phase commits上的文档文章,了解使用应用程序逻辑来强制执行原子性的示例。