Phi*_*ien 4 mongodb mongodb-query aggregation-framework
我有以下文档结构(本例简化)
{
_id : ObjectId("sdfsdf"),
result : [1, 3, 5, 7, 9]
},
{
_id : ObjectId("asdref"),
result : [2, 4, 6, 8, 10]
}
Run Code Online (Sandbox Code Playgroud)
我想获得这些result数组的总和,但不是总和,而是一个新的数组,对应于元素基础上的原始数组的总和,即
result : [3, 7, 11, 15, 19]
Run Code Online (Sandbox Code Playgroud)
我在这里搜索了无数的问题,有些问题已经接近了(例如这一个,这个,这一个),但我无法完全实现.
我可以得到每个阵列的总和
aggregate(
[
{
"$unwind" : "$result"
},
{
"$group": {
"_id": "$_id",
"results" : { "$sum" : "$result"}
}
}
]
)
Run Code Online (Sandbox Code Playgroud)
这给了我
[ { _id: sdfsdf, results: 25 },
{ _id: asdref, results: 30 } ]
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何得到每个元素的总和
如果你有3.2或更新的MongoDb,你可以使用includeArrayIndex.
然后你应该改变$unwind.
你的代码应该是这样的:
.aggregate(
[
{
"$unwind" : { path: "$result", includeArrayIndex: "arrayIndex" }
},
{
"$group": {
"_id": "$arrayIndex",
"results" : { "$sum" : "$result"}
}
},
{
$sort: { "_id": 1}
},
{
"$group":{
"_id": null,
"results":{"$push":"$results"}
}
},
{
"$project": {"_id":0,"results":1}
}
]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |