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

MongoDB聚合:如何对文档内嵌套数组元素求和?

MongoDB嵌套数组元素求和解决方案

你直接在$group里使用$sum: "$myData"无法得到正确结果,因为$sum只能处理数值类型,而$myData是嵌套数组结构,MongoDB无法直接对其求和。需要先将嵌套数组扁平化,再进行求和操作,具体聚合管道如下:

完整聚合代码

db.collection.aggregate([
  // 拆解myData的外层数组,将每个子数组转为单独记录
  { $unwind: "$myData" },
  // 拆解每个子数组的元素,将单个数值转为单独记录
  { $unwind: "$myData" },
  // 按id分组,对所有拆解后的数值求和
  {
    $group: {
      _id: "$id",
      sumData: { $sum: "$myData" }
    }
  },
  // 调整输出字段格式,匹配期望结果
  {
    $project: {
      _id: 0,
      id: "$_id",
      sumData: 1
    }
  }
])

各阶段解释

  1. 第一个$unwind:将每个文档的myData外层数组拆解,比如id=1的文档会拆分为3条记录,分别对应[2,0,0]、[0,0,0,3,0,0]、[1,0,0,1,0,0,1,0,0]三个子数组。
  2. 第二个$unwind:将每条记录中的子数组进一步拆解为单个数值,比如[2,0,0]会拆分为3条分别包含2、0、0的记录,所有嵌套层级的数值都被单独提取。
  3. $group阶段:按id分组,使用$sum对所有拆解后的数值求和,得到每个id对应的总数值。
  4. $project阶段:移除默认的_id字段,将分组用的_id重命名为id,保留求和结果sumData,输出格式与你期望的完全一致。

运行上述管道后,会得到如下结果:

[
  { "id": 1, "sumData": 8 },
  { "id": 2, "sumData": 15 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:10