从mongodb中的另一个集合中选择数据后插入集合中

时间:2019-09-06 07:25:12

标签: mongodb

我们有8个具有数据的集合,但我们希望将所有数据都包含在一个集合中,并有一个额外的字段“源”,在这里我们将像1,2,3,...,8一样进行更新,以便我们知道哪个数据来自哪个集合,并且还可以交叉验证是否已将正确数量的数据插入到集合中。

在MySQL中我们曾经做过的事情 插入测试(rowid,title,name,createdby,source) 从test_1中选择rowid,标题,名称,创建者1

,它将使用源名称1将表test_1中的数据插入表test中。

我在这里也想要这样。在MongoDB中不了解我该怎么办。

1 个答案:

答案 0 :(得分:0)

从v4.2开始,您可以在$merge阶段使用聚合。例如

db.src1.aggregate([
    { $addFields: { Source:1 } },
    { $merge: { into: "result"} }
]);

db.src2.aggregate([
    { $addFields: { Source:2 } },
    { $merge: { into: "result"} }
]);

etc...

对于以前的版本,您将需要将map-reduce映射到一个临时集合中,然后运行聚合以调整结果:

db.src1.mapReduce(
  function() {this.Source = 1; emit(this._id, this)},
  function(key, values) {return values},
  {out: {merge: "tmpMerge"}}
);

db.src2.mapReduce(
  function() {this.Source = 2; emit(this._id, this)},
  function(key, values) {return values},
  {out: {merge: "tmpMerge"}}
);

... etc ...

所有集合都合并到tmpMerge中后,replaceRoot并输出到结果集合:

db.tmpMerge.aggregate([
    {$replaceRoot: {newRoot: "$value"}},
    {$out: "result"}
])