如何将聚合结果存储到另一个数据库中

时间:2015-05-20 06:57:56

标签: mongodb

我可以将汇总结果存储到同一数据库中的另一个集合

但是如何将结果存储到另一个数据库

这是用于将集合复制到另一个数据库中:

use test1;
db["user_data"].find().forEach(
  function(d){ db.getSiblingDB("test2")['user_data'].insert(d); 
});

聚合功能:

pipeline = [
  {
    '$group': {
      '_id': {
        '$year': '$birthday'
      },
      'count': {
        '$sum': 1
      }
    }
  }, {
    '$sort': {
      '_id': 1
    }
  }, {
    '$out': output_collection
  }
];
cur = db[source_collection].runCommand('aggregate', {
  pipeline: pipeline,
  allowDiskUse: true
});

2 个答案:

答案 0 :(得分:3)

将聚合运行到输出集合后,您需要运行另一个命令,使用db.cloneCollection()将集合克隆到另一个数据库,如下所示:

db.runCommand({ 
    cloneCollection: "test.output_collection", 
    from: "mongodb.example.net:27017", 
    query: { active: true } 
})

以上内容会复制output_collection服务器上test数据库中的mongodb.example.net集合。该操作仅复制满足查询{ active: true }的文档,但查询参数是可选的。 cloneCollection 始终复制索引。

答案 1 :(得分:0)

Mongo 4.2开始,新的$merge聚合运算符可用于将聚合管道的结果写入另一个数据库中的指定集合

db.collection.aggregate([
  // { $group: { "_id": { $year: "$birthday" }, "count": { $sum: 1 } } },
  // { $sort: { "_id": 1 } },
  { $merge: { into: { db: "to", coll: "collection" } } }
])

请注意,如果目标集合已经包含记录,$merge运算符将随many options一起指定如何合并与现有记录冲突的插入记录。