如何使用聚合将2个数组的对应元素相乘?

时间:2019-06-06 08:53:58

标签: node.js mongodb mongodb-query aggregation-framework

我想将2个数组的各个元素相乘:

{
  "lessonHours": [2, 1, 2]
},
{
  "studentCount": [2, 6, 5]
}

我尝试过$ multiply,但是由于它仅适用于数值而不适用于数组。

我需要这样的东西:

{
  "product": [4, 6, 10]
}

第一个元素是2(1st array)*2(2nd array) = 4. Then 1*6, 2*5

2 个答案:

答案 0 :(得分:1)

使用.map。不要使用.forEach,因为您必须手动将值推回去。

let calculatedValues = lessonHours.map((item, index) => item * studentCount[index])

这仅在两个数组的长度相同时才适用。如果两个数组的长度都不相同,则需要重组代码。

答案 1 :(得分:1)

您可以使用以下汇总

db.collection.aggregate([
  { "$project": {
    "product": {
      "$map": {
        "input": { "$range": [ 0, { "$size": "$lessonHours" }] },
        "in": {
          "$multiply": [
            { "$arrayElemAt": ["$lessonHours", "$$this"] },
            { "$arrayElemAt": ["$studentCount", "$$this"] }
          ]
        }
      }
    }
  }}
])

Output

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "product": [
      4,
      6,
      10
    ]
  }
]