mongo命令提示符中的Mongodb聚合

时间:2015-10-29 14:34:30

标签: mongodb aggregation-framework

我基于这个问题有以下代码 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命令提示符下没有快速和脏的方法来运行此查询。

1 个答案:

答案 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);