我基于这个问题有以下代码 How to efficiently perform "distinct" with multiple keys?:
collection = db.products;
result = collection.aggregate(
[
{"$group": { "_id": { "P1 Connection": "$p1c", "P1 Size": "$p1s" } } },
{"$match" : {"parentGUID":ObjectId("5509b246c519ce4b900138a3")}}
]
)
printjson(result);
printjson语句只打印一堆代码,而不是对象。我也尝试过result()但是出现了以下错误:
> result()
2015-10-29T10:31:14.892-0400 TypeError: Property 'result' of object #<Object> is not a function
如何获得此聚合的结果?如果我将代码放在一个文件中并运行它,看起来可能会这样做,但我很难相信在mongodb命令提示符下没有快速和脏的方法来运行此查询。
答案 0 :(得分:3)
将 $match
管道步骤移至最开头,这将过滤进入管道的文档和 $group
管道阶段然后将使用正确的文档运行管道。由于MongoDB 2.6增加了对返回 aggregate()
方法的游标的支持,因此您需要使用 forEach()
方法迭代游标并访问文档,如下例所示:
var pipeline = [
{"$match" : {"parentGUID":ObjectId("5509b246c519ce4b900138a3")}},
{"$group": { "_id": { "P1 Connection": "$p1c", "P1 Size": "$p1s" } } }
];
var results = db.products.aggregate( pipeline );
results.forEach(printjson);