我们有8个具有数据的集合,但我们希望将所有数据都包含在一个集合中,并有一个额外的字段“源”,在这里我们将像1,2,3,...,8一样进行更新,以便我们知道哪个数据来自哪个集合,并且还可以交叉验证是否已将正确数量的数据插入到集合中。
在MySQL中我们曾经做过的事情 插入测试(rowid,title,name,createdby,source) 从test_1中选择rowid,标题,名称,创建者1
,它将使用源名称1将表test_1中的数据插入表test中。
我在这里也想要这样。在MongoDB中不了解我该怎么办。
答案 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"}
])