如何在MongoDB中按名称分组并聚合对应ID列表?
MongoDB 按名称分组并聚合ID列表
你的核心问题是分组键选择错误,之前的$group用$_id作为分组依据,会把每个文档单独分组,完全不符合需求。下面是正确的聚合方案:
正确聚合管道
db.collection.aggregate([ { $group: { _id: "$name", // 按name字段作为分组依据 equipment_id: { $push: "$id" } // 将每组内的id收集到数组中 } }, { $project: { _id: 0, // 隐藏默认生成的_id字段 equipment_name: "$_id", // 将分组的name重命名为equipment_name equipment_id: 1 // 保留聚合后的id列表 } } ])
逻辑解释
- $group阶段:通过
_id: "$name"将所有名称相同的文档归为一组,再用$push操作把每组里的id字段值依次存入equipment_id数组。 - $project阶段:重新定义输出结构,把分组用的
_id(即原文档的name值)重命名为equipment_name,同时隐藏默认的_id字段,最终输出你需要的格式。
执行结果
运行上述管道后,会得到符合预期的输出:
[ { "equipment_name": "Refrigerator", "equipment_id": [1, 2] }, { "equipment_name": "TV", "equipment_id": [3, 4] } ]
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

