我正在处理排行榜,我的文档具有以下结构:
{
"_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});
并在之后搜索用户。
我可以优化吗?
答案 0 :(得分:0)
使用聚合。我已经完成了使用聚合。它认为它应该适合你。
db.predictions.aggregate(
{ $sort : {"score" : 1}},
{ $project : { "score":true,
"ranking" : {
"$divide" : ["$score", "$score"]
}
}
},
{ $sort : {"ranking" : 1}})