You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:40:34