首页 > 解决方案 > 如何在一个事务中更新多个相关的 mongo db 集合?

问题描述

我正在尝试一次更新多个相关的 mongodb 集合。

{"_id":1, "name":"jack",phone:"1234"}

个人资料

{"_id":1, "personid":1, "country":"Russia", lastvisitedon:"01/01/2010"}
{"_id":2, "personid":1, "country":"Canada", lastvisitedon:"01/01/2010"}

如何同时更新personspersondetails集合,以便:

  1. person.name设置为“千斤顶”
  2. persondetails.lastvisitedon设置为“2020 年 1 月 1 日”WHERE personid=1 and persondetails.country=Canada

事务必须是原子的。

最终结果如下所示:

 {"_id":1, "name":"jack the reaper",phone:"1234"}

个人资料

{"_id":1, "personid":1, "country":"Russia", lastvisitedon:"01/01/2010"}
{"_id":2, "personid":1, "country":"Canada", lastvisitedon:"01/01/2020"}

我知道一个人应该避免加入 mongodb 但有时它是不可避免的,特别是如果persondetails可以有大量的相关文件。

等效的 SQL 查询将是:

update p
set p.name = "jack the reaper", pd.lastvisitedon="01/01/2020"
from persons p
    inner join persondetails pd on
        p._id = pd.personid 
        where p.phone = "1234" and pd.country="Canada"

我从MongoDb 文档中知道现在可以进行多集合事务。但是我该如何解决上述问题呢?

想到的一种天真的方法是:

Open transaction
 update persons collection where phone="1234"
 var personid= get _id from persons collection
 update persondetails collection where personid = personid and country = "canada"
Close transaction

在mongodb中这样做的正确方法是什么?

标签: javascriptnode.jsmongodbmongodb-querynosql

解决方案


推荐阅读