我可以将汇总结果存储到同一数据库中的另一个集合 。
但是如何将结果存储到另一个数据库?
这是用于将集合复制到另一个数据库中:
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
});
答案 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一起指定如何合并与现有记录冲突的插入记录。