我正在将游戏结果保存在MongoDB中,并希望为每位玩家计算3个最佳结果的总和。
使用聚合框架,我可以从我的已完成游戏数据库中构建以下中间管道结果(下面的每个玩家已经完成了5个游戏并给出了得分):
{
"_id" : "Player1",
"points" : [ 324, 300, 287, 287, 227]
},
{
"_id" : "Player2",
"points" : [ 324, 324, 300, 287, 123]
}
现在我需要总结每个玩家的三个最佳值。我能够对数组进行排序,所以在这里也可以只获取每个数组的前3个元素,以便在下一个流水线步骤中构建数组的总和。
如果我只需要一个玩家的结果,那么$ limit会正常工作。我也尝试使用$ slice,但这似乎不适用于聚合框架。
那么我如何得到每个球员三个最佳成绩的总和呢?
答案 0 :(得分:0)
你提到了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'}}}
获得结果。
答案 1 :(得分:0)
$slice method for aggregation framework。有关更详细的答案,请查看here。
来自mongo页面的几个例子:
{ $slice: [ [ 1, 2, 3 ], 1, 1 ] } // [ 2 ]
{ $slice: [ [ 1, 2, 3 ], -2 ] } // [ 2, 3 ]
{ $slice: [ [ 1, 2, 3 ], 15, 2 ] } // [ ]
{ $slice: [ [ 1, 2, 3 ], -15, 2 ] } // [ 1, 2 ]