Mongodb 查找文档并使用其内容在一个原子操作中更新它
我必须在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" } }
{
"history": [
],
"preview": {
"title": "This is the preview title",
"subtitle": "This is a new field"
},
"live": {
"title": "This is the live title"
}
}
我必须找到文档,在预览和实时状态之间进行区分,将区分推到历史记录中,并将预览复制到实时状态。我如何在MongoDB中以原子方式执行这样的多步骤操作,以便在操作过程中数据不会发生更改
我能想到的唯一一件事是使用findAndModify在文档上设置一个标志,以防止中间出现更新,然后在最后一次更新调用中删除该标志。有人能提出更好的解决方案吗
我应该指出,有时,我需要一次性发布多个项目,因此性能对我很重要。找到文档,在内存中进行所有修改并更新它。单文档操作是原子的。您也可以将多个更新打包在一起。我的印象是,单个操作是原子的,因为在同一个文档上不可能同时有两次写入。然而,我的问题不是关于一次手术。它执行查找操作,然后对数据执行一些操作,然后进行更新。我认为Mongo不会将文档锁定在查找和更新之间。它怎么知道我要更新?你能澄清一下吗?非常感谢。