【问题标题】:How to get the rank of an item based on a sort with MongoDB?如何使用 MongoDB 根据排序获取项目的排名?
【发布时间】:2015-12-11 22:47:32
【问题描述】:

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

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

当一个玩家输入他的分数时,我正在寻找一种优化的方式来显示他的排名,同时作为排行榜中的前两名和后两名玩家。

E. G。如果我的名字是鲍勃·迪伦

#  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});,然后搜索用户。

我可以优化它吗?

【问题讨论】:

  • 我认为您不会绕过查询用户得分,然后执行两个额外的查询来分别获得得分较低和得分较高的用户,按得分限制为两个排序。

标签: mongodb mongodb-query


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多