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

MongoDB如何按指定字段分组并将其余字段聚合为嵌入式文档数组

MongoDB按指定字段分组并归集剩余字段到嵌入数组实现方案

直接使用MongoDB聚合管道的$group阶段即可完成需求,不需要额外在应用层做数据处理。

针对你给出的按owner字段分组、剩余字段归集到animals数组的场景,可直接执行以下聚合命令:

// 将your_collection_name替换为你实际的集合名称即可
db.your_collection_name.aggregate([
  {
    $group: {
      _id: "$owner",
      owner: { $first: "$owner" },
      animals: {
        $push: {
          pet: "$pet",
          pet_name: "$pet_name"
        }
      }
    }
  },
  {
    // 移除聚合默认生成的_id临时分组键,匹配预期输出结构
    $project: {
      _id: 0
    }
  }
])

逻辑说明

  • 分组规则:$group阶段的_id字段设置为"$owner",即按owner字段值对全量文档做拆分分组
  • 分组字段保留:同组内所有文档的owner值完全一致,用$first取组内第一条文档的owner值作为结果的owner字段即可
  • 剩余字段归集:通过$push操作符遍历组内每一条文档,把需要保留的pet、pet_name拼成子文档,依次推入animals数组
  • 结构调整:最后用$project去掉聚合默认返回的_id字段,输出结构和预期完全对齐

执行上述命令后,返回结果和你给出的期望输出完全一致:

[
  {
    "owner": "A",
    "animals": [
      {"pet": "dog", "pet_name": "wouf"},
      {"pet": "cat", "pet_name": "miaou"}
    ]
  },
  {
    "owner": "B",
    "animals": [{"pet": "dog", "pet_name": "wouf_wouf"}]
  }
]

如果后续需要调整归集的字段范围,只需要修改$push内的字段映射配置即可,不需要改动其他管道逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:06:26