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

MongoDB聚合$sum返回0而非数组整数总和的问题排查与解决

MongoDB聚合计算数组总和返回0的问题及修复方案

问题背景

原始文档结构如下:

{
  "_id": "2023-04-08",
  "dailyNotes": [
    {
      "therapyDiscipline": "PT",
      "individual": [60, 45, 30, 75, 55],
      "concurrent": [69],
      "coTreat": [67]
    }
  ]
}

需求:计算individual数组内所有数字的总和,生成仅包含individual键(值为该数组总和)的新文档。

失败的聚合尝试

尝试了以下三种聚合语句,均返回individual: 0的错误结果:

尝试1:$group聚合

{
  $group: {
    _id: '$_id',
    individual: { $sum: '$dailyNotes.individual' }
  }
}

返回结果:

{ "_id": "2023-04-08", "individual": 0 }

尝试2:$reduce+$project

{
  $project: {
    individual: {
      $reduce: {
        input: "$dailyNotes.individual", 
        initialValue: 0,
        in: { $sum: [ "$$value", "$$this" ]}
      }
    }
  }
}

尝试3:直接$sum+$project

{
  $project: {
    individual: { $sum: '$dailyNotes.individual' }
  }
}

更新:多记录场景示例

输入文档包含多条dailyNotes记录:

{
  "_id":"2023-04-08",
  "dailyNotes":[
    {
      "therapyDiscipline":"PT",
      "individual":[60,45,30,75,55]
    },
    {
      "therapyDiscipline":"YT",
      "individual":[2,4]
    }
  ]
}

期望返回结果:

{
  "_id":"2023-04-08",
  "dailyNotes":[
    { "individual":265 },
    { "individual":6 }
  ]
}

原因解释

所有尝试返回0的核心原因是:dailyNotes本身是数组,$dailyNotes.individual获取到的是数组的数组(比如单记录场景下是[[60,45,30,75,55]])。

  • $sum运算符直接处理数组时,会将非数值类型(这里的子数组)视为0,因此总和为0;
  • $reduce的input是数组的数组,遍历过程中$$this代表每个子数组,$sum对数组和数值相加时,同样会把数组当作0处理,最终结果为0。

修复方案

单记录场景

方案1:直接取数组首元素后求和

利用$first提取dailyNotes数组的第一个元素,再对其individual数组求和:

{
  $project: {
    individual: { $sum: { $first: "$dailyNotes.individual" } }
  }
}

方案2:先展开数组再聚合

先用$unwind展开dailyNotes数组,再通过嵌套$sum计算数组总和:

[
  { $unwind: "$dailyNotes" },
  {
    $group: {
      _id: "$_id",
      individual: { $sum: { $sum: "$dailyNotes.individual" } }
    }
  }
]

多记录场景(保留每条dailyNotes的独立总和)

使用$map遍历dailyNotes数组,对每个元素的individual数组单独求和:

{
  $project: {
    dailyNotes: {
      $map: {
        input: "$dailyNotes",
        as: "note",
        in: {
          individual: { $sum: "$$note.individual" }
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:15:11