在 MongoDB 的聚合框架中对数组进行切片

Ste*_*nMK 5 mongodb

我将游戏结果保存在 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 但这似乎在聚合框架中不起作用。

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

cod*_*LMN 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'}}}
Run Code Online (Sandbox Code Playgroud)

得到结果。