MongoDB:使用聚合将组中的所有值相乘

时间:2018-02-09 00:31:56

标签: mongodb aggregation-framework

如何编写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聚合器的等效聚合是什么?

1 个答案:

答案 0 :(得分:1)

目前,无法在小组阶段执行此类操作。请参阅here

您需要在$push阶段$reduce后跟$addFields值,以输出3.4版本中的计算值。

$reduce$multiply所有数组元素。

db.documents.aggregate([
 {
    "$group": {
      "_id": null,
      "numbers": {
        "$push": "$number"
      }
    }
  },
  {
    "$addFields": {
      "product": {
        "$reduce": {
          "input": "$numbers",
          "initialValue": 1,
          "in": {
            "$multiply": [
              "$$value",
              "$$this"
            ]
          }
        }
      }
    }
  }
])