You need to enable JavaScript to run this app. MongoDB聚合管道中如何按subject_id对查询结果进行分组
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合管道中如何按subject_id对查询结果进行分组

你可以在现有聚合管道的$project阶段之后新增$group阶段,按subject_id字段分组,搭配$push操作符将同组的所有测试文档存入对应数组即可。

完整聚合管道示例

// 整体聚合管道结构
[
  // ... 前面的其他聚合阶段保留不变
  // 你原本的$project阶段
  {
    $project: {
      _id: 1,
      name: 1,
      subject_id: '$subject.subject',
      groups: '$groups'
    }
  },
  // 新增的分组阶段
  {
    $group: {
      _id: "$subject_id",
      tests: {
        $push: {
          _id: "$_id",
          name: "$name",
          groups: "$groups"
        }
      }
    }
  },
  // 可选:调整字段名,把分组后的默认_id修改为subject_id
  {
    $project: {
      _id: 0,
      subject_id: "$_id",
      tests: 1
    }
  }
]

简化写法

如果你需要保留测试文档的所有字段,不需要手动逐个指定$push的子字段,可以直接使用系统变量$$ROOT,代码更简洁:

{
  $group: {
    _id: "$subject_id",
    tests: { $push: "$$ROOT" }
  }
}

最终输出效果

执行后得到的结构如下:

[
  {
    "subject_id": "111",
    "tests": [
      {
        "_id": 1,
        "name": "Year 1 Maths Paper 1",
        "groups": [/* 原groups字段的27条数据 */]
      },
      {
        "_id": 2,
        "name": "Year 1 Maths Paper 2",
        "groups": [/* 原groups字段的27条数据 */]
      }
    ]
  }
]

内容的提问来源于stack exchange,提问作者user15959355

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:39:02