【问题标题】:Atomically update multiple documents原子更新多个文档
【发布时间】:2015-04-03 23:26:24
【问题描述】:

在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
});

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

【问题讨论】:

    标签: node.js mongodb atomic


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2019-05-25
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多