【发布时间】:2015-11-26 15:52:51
【问题描述】:
如何在不替换另一个聚合输出的集合的情况下将 MongoDB 聚合的结果输出到集合中?
我只需要使用 $out: 'tempCollection' 来获取数据,因为我有 5 亿个文档,并且正在获取 pipeline stage limit
var q = [
{$match: query},
{$group: {_id: '$hash'}},
{$out: 'tempCollection'}
];
async.parallel([
function(callback) {
firstCollection.aggregate(q, callback);
},
function(callback) {
secondCollection.aggregate(q, callback);
},
...
], function() {
// I want to get all from tempCollection (with pagination) here
});
【问题讨论】:
-
您的问题结构错误。
$out总是 替换。你真的想在这里做什么? “添加”两个结果都在一个集合中?还是基于某些共同值“合并”两个结果中的其他值?还要具体说明这是基本节点驱动程序还是其他类似猫鼬、僧侣或其他的东西。 -
我使用猫鼬。我需要以任何方式(合并或写入一个集合等)获取所有不同的哈希值。
-
选择一个。 “合并” - 意味着您有一个共同的“键”或构成“键”的字段,并且您打算在找到相同键的地方“增加”其他值。 “连接” - 意味着您只希望两组结果最终都在一个集合中。请注意,在后者中,“钥匙”确实需要不同,或者是人为制造的。
-
如果在 firstCollection 和 secondCollection 中具有相同的“哈希” - 我只需要得到一个(唯一的)结果。所以我使用聚合,因为 mongoose.distinct 用作聚合包装器,并且有管道阶段限制
标签: node.js mongodb mongoose mongodb-query aggregation-framework