如何根据MongoDB的排序获取项目的排名?

时间:2015-12-11 12:03:15

标签: mongodb mongodb-query

我正在处理排行榜,我的文档具有以下结构:

{
    "_id" : ObjectId("566a8ccc5bce504423858ba2"),
    "username" : "John Smith",
    "score" : 123,
}

当玩家输入他的分数时,我正在寻找一种优化的方式来显示他的排名也是排行榜中的前两位和下两位玩家。

电子。 G。如果我的名字是 Bob Dylan

#  Name      Score
10 J. Smith    128
11 M. Collins  126
12 Bob Dylan   120
13 JAKE        113
14 Mikes       110

然后我的排名是12。

你知道我怎么能得到这种数据吗?

我想避免使用.find().sort({ score: -1});并在之后搜索用户。

我可以优化吗?

1 个答案:

答案 0 :(得分:0)

使用聚合。我已经完成了使用聚合。它认为它应该适合你。

db.predictions.aggregate(
      { $sort : {"score" : 1}},
      { $project : { "score":true,
                     "ranking" : { 
                                  "$divide" : ["$score", "$score"]
                                 }
                   }
      },
      { $sort : {"ranking" : 1}})