Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从mongodb中的另一个集合中选择数据后插入集合_Mongodb - Fatal编程技术网

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

从mongodb中的另一个集合中选择数据后插入集合,mongodb,Mongodb,我们有8个包含数据的集合,但我们希望所有数据都包含在一个集合中,并且还有一个额外的字段“Source”,这里我们将更新为1,2,3,…,8,这样我们就可以知道哪些数据来自哪个集合,还可以交叉验证数据的数量是否正确插入到集合中 在MySQL中,我们曾经做过什么 插入测试(rowid、title、name、createdby、source) 从测试_1中选择rowid、title、name、createdby、1 它将把表test_1中的数据插入到源名称为1的表test中 这里我也想有这样的。在Mo

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

在MySQL中,我们曾经做过什么 插入测试(rowid、title、name、createdby、source) 从测试_1中选择rowid、title、name、createdby、1

它将把表test_1中的数据插入到源名称为1的表test中


这里我也想有这样的。在MongoDB中我不知道如何做到这一点。

从v4.2开始,您可以将聚合与stage一起使用。例如

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

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

etc...

对于以前的版本您需要将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中并输出到结果集合时:

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

我像这样运行db.getCollection(“sample(1stWeekData)”).aggregate([{$addFields:{Source:1}},{$merge:{into:“all_data_collection”}]);但是获取错误{“消息”:“无法识别的管道阶段名称:'$merge'”,“确定”:0,“代码”:40324,“代码名”:“Location40324”,“名称”:“MongoError”}哪个数据库版本$merge从4.2版开始提供,我使用的是db 4.0.0版,如果您只需要执行一次,我已经添加了一个解决方法。如果是循环过程,最好升级。