首页 > 解决方案 > 缩减数组的总和

问题描述

我有一个文档,其中包含从根目录嵌套一个级别的数字数组。我想减少数组的总和并聚合所有这些数组的总和。例如,在下面的集合中,我希望得到 back { votes: 12 }

{
  userId: 1,
  stats: {
    votes: [0, 4, 1, 0, 2]
  }
},
{
  userId: 2,
  stats: {
    votes: [0, 2, 2, 0, 1]
  }
}

我正在尝试减少聚合管道中的总和,但不断获得 0 或 N*initialValue 结果。

{ $group: {
    votes: { $sum: { $reduce: { input: '$stats.votes', initialValue: 0, in: { $add : ["$$value", "$$this"] } } } },
} },

我一直在查看 Mongo 聚合文档$sum$reduce$add似乎无法弄清楚。

标签: node.jsmongodbaggregation-framework

解决方案


您可以按常量值分组(以获取单个文档)使用 double$sum从所有文档中获取 totalSum。内部将单个文档的所有投票相加,外部将结果相加,同时进行分组:

db.collection.aggregate([
    {
        $group: {
            _id: null,
            totalSum: { $sum: { $sum: "$stats.votes" } }
        }
    }
])

蒙戈游乐场


推荐阅读