我想将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
答案 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"] }
]
}
}
}
}}
])
[
{
"_id": ObjectId("5a934e000102030405000000"),
"product": [
4,
6,
10
]
}
]