聚合mongodb后如何更新所有文档?

时间:2019-06-02 10:49:15

标签: mongodb aggregation-framework

我有两个集合 A B ,并且我引用了其他集合 B 中的一个字段,因此将两个结果汇总到:

[{"name":"Adam","Average-Count":"20.22","price":"24","_id":2}, ...]

集合A中的文档为:

[{"name":"Adam","Average-Count":"0","Last-Name":"Smith","_id":2},....]

我想更新集合A中平均计数字段的所有默认值以更正聚合后获得的值 他们是在单个查询中更新所有文档的方法,还是我们可以在聚合管道中更新文档?

1 个答案:

答案 0 :(得分:0)

  

是否可以通过单个查询来更新所有文档,或者是否可以在聚合管道中更新文档?

从MongoDB 4.2开始,update命令可以使用聚合管道进行更新。目前,管道可以包括以下阶段:$set$unset$replaceWith

由于您的问题涉及到在$lookup阶段首先在管道中加入集合,因为当前尚不支持此阶段,所以您可以:

  • 修改document data model以合并集合,并将更新与聚合管道一起使用。
  • 保留数据模型,并使用$merge聚合阶段

$merge可以将结果(插入新文档,合并文档,替换文档,保留现有文档,操作失败,使用自定义更新管道处理文档)合并到现有集合中。例如:

{ "$merge": { 
     into: "A", 
     on: "_id", 
     whenMatched: "replace", 
     whenNotMatched: "insert" 
}}