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

MongoDB关联集合学生ID合并为单数组的聚合查询问题

修正MongoDB聚合查询,合并关联的学生数组

我来帮你调整这个聚合查询,让它输出你期望的合并后单一数组结果~

首先,咱们先分析下当前查询的问题:$lookup之后得到的GroupDetails是一个包含多个Subjects文档的数组,每个文档里又嵌套了members.student数组,所以最终结果是嵌套的数组结构。咱们需要把这些分散的学生数组合并成一个扁平的数组。

修正后的聚合查询

db.Colleges.aggregate([
  // 筛选目标学院,这一步保留不变
  { $match : { "clgID" : { $in : ["100", "200"] } } },
  // 关联Subjects集合,这一步也保留不变
  { $lookup: { 
      from: "Subjects", 
      localField: "clgID", 
      foreignField: "college.collegeID", 
      as: "GroupDetails" 
    } },
  // 关键修正:用$reduce和$concatArrays合并所有学生数组
  { $project: {
      _id: false,
      clgName: "$name",
      GroupDetails: {
        $reduce: {
          input: "$GroupDetails", // 遍历lookup得到的Subjects数组
          initialValue: [],       // 初始累加器是空数组
          in: { $concatArrays: ["$$value", "$$this.members.student"] } // 把当前文档的student数组和累加器合并
        }
      }
    } }
])

代码解释

  • $reduce 会遍历$lookup返回的GroupDetails数组,每次迭代都将当前Subject文档中的members.student数组与累加器($$value)合并。
  • 对于没有关联任何Subject的“National”学院,$reduce会保持初始的空数组,完全符合你的期望输出。

最终输出结果

{ "GroupDetails" : [], "clgName" : "National" },
{ "GroupDetails" : [ "123", "456", "789" ], "clgName" : "Anna University" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:20:20