MongoDB如何按指定字段去重统计并输出含0计数的分类结果
问题原因
原查询无法输出计数为0的分类组合,是因为第一步的$match操作直接过滤掉了所有cat_type != "A"的文档,categoryCode2对应的文档根本没有进入后续分组逻辑,所以结果中不会出现该分类。
解决方法
不需要提前过滤文档,先按categoryCode + categoryName做全量分组,统计数量时通过$cond条件判断只累加符合cat_type要求的文档即可,具体聚合语句如下:
db.collection.aggregate([ { $group: { _id: { categoryCode: "$categoryCode", categoryName: "$categoryName" }, // 仅对cat_type为A的文档计数,不符合要求的不累加 cat_count: { $sum: { $cond: [{ $eq: ["$cat_type", "A"] }, 1, 0] } } } }, { $project: { _id: 0, categoryCode: "$_id.categoryCode", categoryName: "$_id.categoryName", cat_count: 1 } } ])
如果数据量较大,你可以给categoryCode、categoryName、cat_type三个字段加联合索引,大幅提升聚合查询的执行效率。
内容的提问来源于stack exchange,提问作者prabhakar srivastava
相关产品推荐
相关产品推荐

