MongoDB中如何按类别统计不同分组的数量?
解决MongoDB按Category统计不同Group数量的问题
原始数据集
Category: A, Group: 1 Category: A, Group: 1 Category: A, Group: 2 Category: A, Group: 3 Category: B, Group: 5 Category: B, Group: 5
期望结果
Category A: 3 Category B: 1
解决方案
你需要通过两次分组实现统计不同Group的数量,具体聚合管道如下:
db.collection.aggregate([ // 第一步:按Category+Group组合分组,去重重复的Group记录 { $group: { _id: { category: "$Category", group: "$Group" } } }, // 第二步:按Category分组,统计去重后的Group数量 { $group: { _id: "$_id.category", distinctGroupCount: { $sum: 1 } } }, // 可选:格式化输出为你期望的字符串格式 { $project: { _id: 0, result: { $concat: ["Category ", "$_id", ": ", { $toString: "$distinctGroupCount" }] } } } ])
步骤说明
- 第一次分组:将
Category和Group作为联合主键分组,同一个Category下的重复Group会被合并成单条记录,完成去重。 - 第二次分组:以
Category为分组键,统计每个分组下的记录数,这个数值就是该Category下不同Group的数量。 - 可选格式化:通过
$project阶段将结果转换成你期望的字符串格式,若不需要格式化,可直接省略该阶段,得到包含_id(对应Category)和distinctGroupCount的结构化文档。
内容的提问来源于stack exchange,提问作者Ptros
相关产品推荐
相关产品推荐

