我试图使用MongooseJS构建相对排行榜。鉴于以下数据(简化):
{
user: 1,
score: 10
},
{
user: 1,
score: 5
},
{
user: 2,
score: 3
},
{
user: 3,
score: 5
},
{
user: 3,
score: 3
},
{
user: 4,
score: 2
}
以下查询:
ActionLog.model.aggregate()
.group({_id: '$user',totalScore:{$sum:'$score'}})
.sort('-totalScore')
.limit(3)
.exec(function(err, logs){
if(err) { return res.apiError('1103', Errors['1103']); }
User.model.populate(logs, {path: '_id', select:'username'}, function(err) {
return res.apiResponse(logs);
});
});
我会得到3个用户(用户1,3和2)的结果,其总分数按总分数排序。哪个效果很好。不过我说我想得到一个相对排行榜,在那里我得到了前方和后方球员的高分。例如,玩家2的相对排行榜必须返回如下内容:
{
_id: {
"_id": "3",
"username": "David"
},
totalScore: 8
},
{
_id: {
"_id": "2",
"username": "Elsa"
},
totalScor: 3
},
{
_id: {
"_id": "4",
"username": "John"
},
totalScore: 2
}
我如何得到它?