Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 查找文档并使用其内容在一个原子操作中更新它_Mongodb_Mongodb Query_Atomicity - Fatal编程技术网

Mongodb 查找文档并使用其内容在一个原子操作中更新它

Mongodb 查找文档并使用其内容在一个原子操作中更新它,mongodb,mongodb-query,atomicity,Mongodb,Mongodb Query,Atomicity,我必须在MongoDB中对一组文档执行某些多步骤操作。例如,我的每个文档中都有两个子文档,如: { "history": [ ], "preview": { "title": "This is the preview title", "subtitle": "This is a new field" }, "live": { "title": "This is the live title" } }

我必须在MongoDB中对一组文档执行某些多步骤操作。例如,我的每个文档中都有两个子文档,如:

{
    "history": [

    ],
    "preview": {
        "title": "This is the preview title",
        "subtitle": "This is a new field"
    },
    "live": {
        "title": "This is the live title"
    }
}
我必须找到文档,在预览和实时状态之间进行区分,将区分推到历史记录中,并将预览复制到实时状态。我如何在MongoDB中以原子方式执行这样的多步骤操作,以便在操作过程中数据不会发生更改

我能想到的唯一一件事是使用findAndModify在文档上设置一个标志,以防止中间出现更新,然后在最后一次更新调用中删除该标志。有人能提出更好的解决方案吗


我应该指出,有时,我需要一次性发布多个项目,因此性能对我很重要。

找到文档,在内存中进行所有修改并更新它。单文档操作是原子的。您也可以将多个更新打包在一起。我的印象是,单个操作是原子的,因为在同一个文档上不可能同时有两次写入。然而,我的问题不是关于一次手术。它执行查找操作,然后对数据执行一些操作,然后进行更新。我认为Mongo不会将文档锁定在查找和更新之间。它怎么知道我要更新?你能澄清一下吗?非常感谢。