如何编写mongodb聚合查询以获取组中一组值的乘积(换句话说,将它们全部相乘)。
例如,假设我有一份文件清单,如
_id: "1"
number: 12
_id: "2"
number: 3
_id: "3"
number: 6
我想基本上做以下事情:
db.documents.aggregate([
$group: {
product: { $multiplyAll: "$number" }
}
])
从我的示例文档中,此查询将导致(12 * 3 * 6)= 216
我的$ multiplyAll聚合器的等效聚合是什么?
答案 0 :(得分:1)
目前,无法在小组阶段执行此类操作。请参阅here
您需要在$push
阶段$reduce
后跟$addFields
值,以输出3.4版本中的计算值。
db.documents.aggregate([
{
"$group": {
"_id": null,
"numbers": {
"$push": "$number"
}
}
},
{
"$addFields": {
"product": {
"$reduce": {
"input": "$numbers",
"initialValue": 1,
"in": {
"$multiply": [
"$$value",
"$$this"
]
}
}
}
}
}
])