【问题标题】:Aggregate sum of reduced array缩减数组的总和
【发布时间】:2020-11-10 10:36:05
【问题描述】:

我有一个文档,其中包含从根目录嵌套一层的数字数组。我想减少数组的总和并聚合所有这些数组的总和。例如,在下面的集合中,我希望返回 { 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"] } } } },
} },

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

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案1】:

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

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

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 2019-09-03
      • 2015-06-19
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      相关资源
      最近更新 更多