我有一個高度嵌套的 MongoDB 物件集,我想根據每個洞的推桿總和的結果對子檔案進行排序,例如:
[
{
"_id": "61cab7361f1c58e1555b1cbb",
"userId": "user1",
"matchType": "tournament",
"scoreHoles": [
{
"hole": "hole1"
"put": 2,
"_id": "61cab86e0f765cd9428de547"
},
{
"holeId":"hole2"
"put": 3,
"_id": "61cab86e0f765cd9428de548"
}
],
},
{
"_id": "61cab6361f1c58e1555b1c93",
"userId": "user 2",
"matchType": "tournament",
"scoreHoles": [
{
"holeId": "hole1",
"put": 4,
},
{
"holeId": "hole2",
"put": 4,
}
],
}
]
我想根據他們的 scoreHole.puts 總和的結果排序為降序點,預期輸出是
[
{
"userId" : xxx,
"scoreHoles": [
{
"hole": "hole1",
"put": 4,
"_id": "61cab86e0f765cd9428de547"
},
{
"hole":"hole2",
"put": 4,
}
],
"totalPuts" : 8
},
"userId" : xxx,
"scoreHoles": [
{
"holeId": "hole1",
"put": 2,
},
{
"holeId": "hole2"
"put": 3,
}
],
"totalPuts" : 5
]
任何的想法 ?
uj5u.com熱心網友回復:
$project- 裝飾輸出檔案。使用$reduce,totalPuts通過對陣列中put每個物件的值求和來創建scoreHoles。$sort- 按totalPuts降序排序。
db.collection.aggregate([
{
$project: {
_id: 0,
userId: 1,
scoreHoles: 1,
totalPuts: {
"$reduce": {
"input": "$scoreHoles",
"initialValue": 0,
"in": {
$sum: [
"$$value",
"$$this.put"
]
}
}
}
}
},
{
"$sort": {
totalPuts: -1
}
}
])
Mongo Playground 上的示例演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/396456.html
標籤:MongoDB 表达 猫鼬 mongodb-查询
下一篇:在MongoDB中查找唯一索引
