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
相关产品推荐
相关产品推荐

