MongoDB命令提示符中的聚合操作

3

我有以下基于这个问题的代码:如何高效地使用多个键执行“distinct”?

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个回答

4
$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);

1
这将产生更符合我的预期的结果。 - zelinka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接