原子更新多个文档
Atomically update multiple documents
在mongodb中,我有以下命令来更新一堆文档
我正在使用 mongodb-Node.js 的本机驱动程序:
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
});
但是,当我进行读取时,我发现集合处于第一个操作完成但第二个操作未完成的状态。我可以做些什么来使多个更新原子化吗?
没有。在 MongoDB 中,操作仅在单个文档级别是原子的。多个更新或影响多个文档的更新总是有可能在文档更改之间产生,从而允许 "intermediate state" 读取发生。通常,在可行的范围内,原子性要求内置于文档设计中。除此之外,由应用程序强制执行其原子性要求。查看 2-phase commits 上的文档文章,了解使用应用程序逻辑强制执行原子性的示例。
在mongodb中,我有以下命令来更新一堆文档
我正在使用 mongodb-Node.js 的本机驱动程序:
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
});
但是,当我进行读取时,我发现集合处于第一个操作完成但第二个操作未完成的状态。我可以做些什么来使多个更新原子化吗?
没有。在 MongoDB 中,操作仅在单个文档级别是原子的。多个更新或影响多个文档的更新总是有可能在文档更改之间产生,从而允许 "intermediate state" 读取发生。通常,在可行的范围内,原子性要求内置于文档设计中。除此之外,由应用程序强制执行其原子性要求。查看 2-phase commits 上的文档文章,了解使用应用程序逻辑强制执行原子性的示例。