我将游戏结果保存在 MongoDB 中,并希望计算每个玩家 3 个最佳结果的总和。
借助聚合框架,我可以从已完成游戏的数据库中构建以下中间管道结果(下面的每个玩家都已完成 5 场游戏并给出分数):
{
"_id" : "Player1",
"points" : [ 324, 300, 287, 287, 227]
},
{
"_id" : "Player2",
"points" : [ 324, 324, 300, 287, 123]
}
Run Code Online (Sandbox Code Playgroud)
现在我需要总结每个玩家的三个最佳值。我能够对数组进行排序,因此这里也可以只获取每个数组的前 3 个元素,以便在下一个管道步骤中构建数组的总和。
如果我只需要一名玩家的结果,$limit 就可以正常工作。我还尝试使用 $slice 但这似乎在聚合框架中不起作用。
那么如何获得每个玩家的三个最佳成绩的总和呢?
你提到了it would also be ok here to get only the first 3 elements of each array to build the sum of the array in the next pipeline step.,所以先这样做,然后使用:
db.test.aggregate({'$unwind':'$points'},{'$group':{'_id':'$_id','result':{'$sum':'$points'}}}
Run Code Online (Sandbox Code Playgroud)
得到结果。
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |