node.js - 缩减数组的总和
问题描述
我有一个文档,其中包含从根目录嵌套一个级别的数字数组。我想减少数组的总和并聚合所有这些数组的总和。例如,在下面的集合中,我希望得到 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
似乎无法弄清楚。
解决方案
您可以按常量值分组(以获取单个文档)使用 double$sum
从所有文档中获取 totalSum。内部将单个文档的所有投票相加,外部将结果相加,同时进行分组:
db.collection.aggregate([
{
$group: {
_id: null,
totalSum: { $sum: { $sum: "$stats.votes" } }
}
}
])
推荐阅读
- r - 获取比较多列的单列值
- excel - 从 Excel 调用 Access 函数
- lua - 为什么这个lua变量是nil,如果赋值语句后跟一个“,”
- c++ - 带有指针和 const 方法的类
- python - 如果将在 Python 中使用该类的实例,我是否必须导入该类?
- javascript - react-i18next:如何同步浏览器和 Express LanguageDetector?
- html - 即使向右浮动,元素也会向左移动
- android - Android,Animate只是父视图,而不是子视图?
- android - Android 相机 2:ImageReader 的图像没有步幅值
- python - Flask-Sqlalchemy:过滤列包含某个对象的行