在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
});
然而,当我进行读取时,我发现集合处于第一个操作完成但不是第二个操作的状态。我能做些什么来使多个更新原子化吗?
答案 0 :(得分:1)
没有。在MongoDB中,操作仅在单个文档的级别上是原子的。影响多个文档的多个更新或更新始终有可能在文档更改之间产生,从而允许“中间状态”读取发生。通常,在可行的范围内,原子性要求内置于文档设计中。除此之外,应用程序还要强制执行其原子性要求。查看2-phase commits上的文档文章,了解使用应用程序逻辑来强制执行原子性的示例。