首页 文章

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

提问于
浏览
2

我有一个mongodb集合如下:{color:'blue',category:'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

    这是怎么做的:

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

相关问题