首页 > 解决方案 > 在 Mongo 聚合中按变量分组

问题描述

我有一个 mongo 聚合,目前在这个项目中结束:

      {
        $project: {
          _id: 1,
          name: 1,
          subject_id: '$subject.subject',
          groups: '$groups'
        }
      }

它创建了这个测试数组:

0:
_id: 1
groups: (27)
name: "Year 1 Maths Paper 1"
subject_id: "111"
1:
_id:2
groups: (27)
name: "Year 1 Maths Paper 2"
subject_id: "111"

但是,我想按 subject_id 对数据进行分组。所以每个主题都是一个数组,里面有与之相关的测试。有谁知道如何做到这一点?

标签: mongodbmongodb-queryaggregation-framework

解决方案


演示 - https://mongoplayground.net/p/-cST7kqFYxS

使用$group来分组 subject_id 和$push名称到测试数组。

db.collection.aggregate([
  {
    $group: {
      _id: "$subject_id",
      tests: { $push: "$name" }
    }
  }
])

推荐阅读