如何使用MongoDB Aggregation对同key对象分组并输出指定结构
解决方案
你只需要在现有$group阶段之后再加两个聚合阶段即可,完整的聚合管道如下:
[ // 原有分组统计逻辑 { $group: { _id: { key: "$data.key", value: "$data.value" }, count: { $sum: 1 }, } }, // 二次分组按key归集统计结果 { $group: { _id: "$_id.key", result: { $push: { value: "$_id.value", count: "$count" } } } }, // 调整输出字段格式 { $project: { _id: 0, key: "$_id", result: 1 } } ]
逻辑说明
- 第一阶段和你原有逻辑一致,先按
data.key+data.value组合分组,统计每个组合的出现次数 - 第二阶段以第一阶段输出的
_id.key为分组维度,将同一个key下所有value对应的统计结果通过$push操作归集到result数组中 - 第三阶段通过
$project调整最终输出结构,隐藏默认生成的_id字段,将分组维度值映射为key字段,保留result字段即可
如果需要和示例期望的输出顺序一致(value按count降序排列),可以在第一阶段之后新增排序阶段:
{ $sort: { count: -1 } }
内容的提问来源于stack exchange,提问作者extradeck
相关产品推荐
相关产品推荐

