4

我将游戏结果保存在 MongoDB 中,并想计算每个玩家的 3 个最佳结果的总和。

使用聚合框架,我能够从我的已完成游戏数据库中构建以下中间管道结果(下面的每个玩家都完成了 5 场比赛并获得了分数):

    {
        "_id" : "Player1",
        "points" : [ 324, 300, 287, 287, 227]
    },
    {
        "_id" : "Player2",
        "points" : [ 324, 324, 300, 287, 123]
    }

现在我需要总结每个玩家的三个最佳值。我能够对数组进行排序,因此在这里也可以只获取每个数组的前 3 个元素,以在下一个管道步骤中构建数组的总和。

如果我只需要一个玩家的结果,$limit 就可以正常工作。我也尝试过使用 $slice ,但这似乎在聚合框架中不起作用。

那么如何获得每个玩家的三个最佳结果的总和呢?

4

2 回答 2

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'}}}

得到结果。

于 2012-12-23T18:53:01.243 回答
0

3.2 版本的 mongo 中添加了聚合框架的 $slice 方法。如需更详细的答案,请查看此处

还有来自 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 ]
于 2015-11-09T05:55:48.557 回答