需要一个聚合查询来执行$ match,$ group并返回匹配元素的计数和每个组中所有元素的计数

时间:2013-12-16 15:30:32

标签: mongodb aggregation-framework

我有一个mongodb集合如下:     {color:'blue',类别:'A',.....}     {color:'yellow',category:'A',....}     {color:'blue',类别:'B',......}     ...     ....

像这样的查询:     db.collection.aggregate([{$ match:{color:'blue'}},{$ group:{_ id:“$ category”,num:{$ sum:1}}}])

返回颜色的文档数:每个类别的“蓝色”。

现在,我想在同一个聚合查询中获取每个类别中的文档总数。这样可以避免在非常大的数据库上对mongodb服务器进行额外的查询。因为它是第一个查询需要花费几分钟才能完成。添加另一个查询几乎会复制数据库服务器的工作(再次分组和计数),因此需要更长的时间。 这可能吗?

如果没有,是否有单个API调用在指定的键字段上合并两个AggregationOutput结果?

感谢。

1 个答案:

答案 0 :(得分:0)

以下是如何操作:

db.collection.aggregate([{$group:{_id:"$category", 
                     num:{$sum:1}, 
                     blues:{$sum:{$cond:[{$eq:["$color","blue"]}, 1, 0]}}
}}]