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

MongoDB聚合查询各院系授课学生最多的讲师实现方法

MongoDB 查找各院系授课学生数最多讲师实现方案

完全可以在你现有聚合代码的基础上直接扩展实现,不需要修改前面已经写好的department和group集合关联逻辑,只需要在原有聚合管道的末尾追加几个处理阶段即可。

实现逻辑

  • 遍历每个院系下的所有讲师,统计每位讲师所授所有课程的学生累计总数
  • 对比同一院系下所有讲师的累计学生数,筛选出数值最高的讲师记录
  • 整理字段输出为要求的格式

完整追加代码

把以下聚合阶段直接追加到你原有聚合代码的最后一个$group阶段之后即可:

// 为每位讲师计算累计授课学生数
{
  $set: {
    lectures: {
      $map: {
        input: "$lectures",
        as: "lecturer",
        in: {
          $mergeObjects: [
            "$$lecturer",
            {
              totalStudents: {
                $reduce: {
                  input: "$$lecturer.imparts",
                  initialValue: 0,
                  in: {
                    $add: [
                      "$$value",
                      { $size: { $ifNull: ["$$this.students", []] } }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
},
// 筛选出院系内学生数最高的讲师
{
  $set: {
    topLecturer: {
      $reduce: {
        input: "$lectures",
        initialValue: { totalStudents: -1 },
        in: {
          $cond: [
            { $gt: ["$$this.totalStudents", "$$value.totalStudents"] },
            "$$this",
            "$$value"
          ]
        }
      }
    }
  }
},
// 输出指定格式字段
{
  $project: {
    name: 1,
    faculty: 1,
    lecturerID: "$topLecturer.lecturerID",
    maxImpartsStudents: "$topLecturer.totalStudents"
  }
}

补充说明

  • 以上代码默认按照你给出的示例逻辑统计:直接累加每门课程students数组的长度,同一学生重复选择同一讲师的多门课程会重复计数。如果需要统计去重后的学生总数,将第一个阶段中计算totalStudents的逻辑替换为以下代码即可:
totalStudents: {
  $size: {
    $setUnion: {
      $reduce: {
        input: "$$lecturer.imparts",
        initialValue: [],
        in: {
          $concatArrays: [
            "$$value",
            { $ifNull: ["$$this.students.studentID", []] }
          ]
        }
      }
    }
  }
}
  • 代码中加入了$ifNull做容错处理,避免某门课程下缺失students字段时聚合报错。
  • 如果需要在最终结果中保留讲师姓名、邮箱等信息,只需要在最后一个$project阶段增加对应字段映射即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:17