如果数组很小(3x3 表示 9 次操作),可以使用 $slice 对数组进行切片,但展开它会为 3x3 数组生成 27 个文档,因此将它们连接回来是一种痛苦。
或者您可以使用 forEach 使用更简单的解决方案
var arraySize=3;
var a=[];
db.david.find({label:"label2"}).forEach(function(myDoc) {
for(var i=0;i<arraySize;i++){
a[i]=myDoc.A[i]+myDoc.B[i]+myDoc.C[i];
}
})
printjson( a )
编辑
我仍然不确定如何以更动态的方式解决这个问题 - 但这是一种针对 3 个数组的提议,每个数组包含 3 个元素。
var arraySumprojection = {
$project : {
col1 : {
$let : {
vars : {
a : {
"$arrayElemAt" : ["$A", 0]
},
b : {
"$arrayElemAt" : ["$B", 0]
},
c : {
"$arrayElemAt" : ["$C", 0]
},
},
in : {
$add : ["$$a", "$$b","$$c"]
}
}
},
col2 : {
$let : {
vars : {
a : {
"$arrayElemAt" : ["$A", 1]
},
b : {
"$arrayElemAt" : ["$B", 1]
},
c : {
"$arrayElemAt" : ["$C", 1]
},
},
in : {
$add : ["$$a", "$$b","$$c"]
}
}
},
col3 : {
$let : {
vars : {
a : {
"$arrayElemAt" : ["$A", 2]
},
b : {
"$arrayElemAt" : ["$B", 2]
},
c : {
"$arrayElemAt" : ["$C", 2]
},
},
in : {
$add : ["$$a", "$$b","$$c"]
}
}
},
}
}
])