【问题标题】:Update field of a collection based on another collection - MongoDB基于另一个集合更新集合的字段 - MongoDB
【发布时间】:2021-12-09 22:10:56
【问题描述】:

我有两个集合集合A的结构是

{
     id:
     product:
}

集合B的结构是

{
     id:
     product:
     status:
}

我想更新集合 B 就像如果集合 A 中存在产品,那么它将状态 1 设置为集合 B 的相应文档。

SQL 语法类似于

UPDATE B SET B.STATUS = 1 WHERE B.PRODUCT IN (SELECT PRODUCT FROM A);

我只需要在 MongoDB 中做同样的事情。提前致谢。

【问题讨论】:

  • 从 v4.2 开始,您无法在单个更新查询中访问其他集合。但是,您可以执行两个单独的读取和更新查询。
  • 我在这些集合中有数百万个文档。它需要快速。我无法一一阅读和更新..还有其他建议吗? @thammada.ts
  • 好的,我收回它,从 v4.2 开始,您可以按照@Joe 的建议使用 $merge

标签: mongodb


【解决方案1】:

在 MongoDB 4.2 中,您可以使用聚合来做到这一点。

  • 聚合集合A
  • $lookup 来自集合 B,本地和外国字段都设置为“产品”
  • $unwind查找返回的数组
  • $replaceRoot 将查找到的文档设为root
  • $projectstatus: {$literal:1}
  • $merge 与集合 B

【讨论】:

  • 我是 MongoDB 新手 .. 你能写下查询吗? @乔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多