如何使用MongoDB聚合查询按Team分组并获取对应ID数组?
按Team分组聚合ID数组的MongoDB查询方案
要实现将teams集合中的数据按team字段分组,并把每个组内的id字段收集成数组,可以使用MongoDB的聚合框架,核心用$group阶段来完成分组和数据聚合。
完整查询语句
db.teams.aggregate([ // 按team字段分组,收集对应id到ids数组 { $group: { _id: "$team", ids: { $push: "$id" } } }, // 重命名字段,匹配目标输出格式 { $project: { _id: 0, team: "$_id", ids: 1 } } ])
步骤解释
- $group阶段:
_id: "$team":指定按team字段的值进行分组,每个唯一的team值会成为一个分组的标识。ids: { $push: "$id" }:使用$push操作符,把每个分组内文档的id字段值依次添加到ids数组中。
- $project阶段:
_id: 0:不返回默认的_id字段。team: "$_id":将分组标识_id(即原team值)重命名为team字段,贴合目标输出格式。ids: 1:保留之前聚合得到的ids数组。
执行上述查询后,就能得到目标结果:
[ { team: "Mavs", ids: [0, 1] }, { team: "Rockets", ids: [2, 3, 4] }, { team: "Cavs", ids: [5] } ]
补充优化
如果需要确保ids数组内的数值按升序排列,可以在$group之后添加一个$addFields阶段:
{ $addFields: { ids: { $sortArray: { input: "$ids", sortBy: 1 } } } }
这个步骤能让数组始终保持有序,适合原数据id顺序不固定的场景。
内容的提问来源于stack exchange,提问作者Tohfatul Islam Milton
相关产品推荐
相关产品推荐

