如何使用聚合$ out运算符附加现有的MongoDB集合?

时间:2019-05-16 12:02:55

标签: mongodb aggregation-framework

我有MongoDB 4.0 Atlas实例,我需要将聚合结果附加到现有集合中而不删除现有项目。

我需要在$ out中使用“ mode:replaceDocuments”之类的东西,但是该模式仅在MongoDB 4.2中可用

我想要得到的东西:

源1-现有集合“ A”:

[{ "_id": "id_1", "a": 1 },
 { "_id": "id_2", "a": 2 }]

来源2-汇总结果数据:

[{ "_id": "id_3", "a": 3 },
 { "_id": "id_4", "a": 4 }]

结果-将数据添加到现有集合“ A”中:

[{ "_id": "id_1", "a": 1 },
 { "_id": "id_2", "a": 2 },
 { "_id": "id_3", "a": 3 },
 { "_id": "id_4", "a": 4 }]

1 个答案:

答案 0 :(得分:0)

MongoDB v4.2(当前为v4.2.0-rc1)中,您可以利用Aggregation Pipeline $merge stage附加到现有集合中。

$merge阶段:

  • 可以输出到相同或不同数据库中的集合。
  • 如果输出集合尚不存在,则创建一个新集合。
  • 可以将结果(插入新文档,合并文档,替换文档,保留现有文档,失败操作,使用自定义更新管道处理文档)合并到现有集合中。
  • 可以输出到分片集合。输入集合也可以分片。

对于您的示例,您可以执行以下操作:

 db.collection.aggregate([ ...., 
               { "$merge" : { into: "A" } } // Has to be the last stage in the pipeline
 ]);

另请参见Comparison with $out

$merge有很多用例: