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

如何在MongoDB聚合查询中按子数组索引使用$sum完成求和操作

问题原因与修正方案
  • 核心错误:聚合阶段关键字拼写错误,你写的$groups多了末尾的s,正确的分组聚合阶段是$group,这是代码不生效的首要原因。
  • 逻辑说明:你已经通过$unwind拆分了asks数组,拆分后的每一条记录的asks字段就是原二维数组里的单个[a, b]子数组,此时取索引1的值的逻辑本身没有问题,修正拼写错误后原逻辑即可正常运行。

修正后的原逻辑代码

db.getCollection("test").aggregate([
  { $unwind: "$asks" },
  {
    $group: {
      _id: 0,
      total: { $sum: { $arrayElemAt: ["$asks", 1] } },
      count: { $sum: 1 },
    },
  },
]);

性能优化方案(无需$unwind)

如果数据量较大,$unwind会产生大量中间记录拖慢执行效率,可以用$reduce运算符直接在每个文档内完成子数组索引1值的累加,再全局汇总,执行效率更高:

db.getCollection("test").aggregate([
  {
    $group: {
      _id: 0,
      total: {
        $sum: {
          $reduce: {
            input: "$asks",
            initialValue: 0,
            in: { $add: ["$$value", { $arrayElemAt: ["$$this", 1] }] }
          }
        }
      },
      count: { $sum: { $size: "$asks" } }
    }
  }
])

以上方案适配的文档结构为asks字段是二维数组,每一个子数组的索引1位置为需要累加的数值。

内容的提问来源于stack exchange,提问作者mean.cj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:45:04