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

如何编写MongoDB查询按年龄分组并返回数组的数组?

解决MongoDB按age分组并返回数组的数组问题

问题分析

你之前的聚合查询报错,是因为$group阶段中,除_id外的字段必须使用MongoDB的累加器操作符(如$push、$sum),直接引用字段"$name"不符合语法规则。要实现按age分组并返回数组的数组格式,需要分阶段构建聚合逻辑。

完整聚合查询

db.users.aggregate([
  // 按age分组,将用户信息转换为预期格式并存入数组
  {
    $group: {
      _id: "$age",
      userGroup: {
        $push: {
          _id: "$_id",
          name: "$name",
          class: { $cond: [{ $eq: ["$age", 22] }, 2, 5] }
        }
      }
    }
  },
  // 将所有分组的用户数组收集为一个大数组
  {
    $group: {
      _id: null,
      result: { $push: "$userGroup" }
    }
  },
  // 清理输出字段,只保留结果数组
  {
    $project: {
      _id: 0,
      result: 1
    }
  }
])

各阶段说明

  1. 第一阶段$group:
    • 按age字段分组,使用$push累加器将每个用户的_id、name存入数组,同时通过$cond将age映射为预期的class值(22→2,30→5)。
  2. 第二阶段$group:
    • 以_id: null聚合所有分组结果,将每个分组的userGroup数组推入result大数组,形成“数组的数组”结构。
  3. 第三阶段$project:
    • 移除默认的_id字段,只输出result字段,得到符合要求的最终格式。

注意事项

如果不需要映射class字段,仅保留原用户结构,可将第一阶段的$push改为直接引用整个文档:

$push: { _id: "$_id", name: "$name", age: "$age" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:07