根据排序顺序获取文档在集合中的位置

acr*_*uui 2 javascript mapreduce mongoose mongodb

我是MongoDB(+ Mongoose)的新手.我有一个高分的集合,文档看起来像这样:

{id: 123, user: 'User14', score: 101}
{id: 231, user: 'User10', score: 400}
{id: 412, user: 'User90', score: 244}
{id: 111, user: 'User12', score: 310}
{id: 221, user: 'User88', score: 900}
{id: 521, user: 'User13', score: 103}

+ thousands more...
Run Code Online (Sandbox Code Playgroud)

现在我得到了前5名球员:

highscores
    .find()
    .sort({'score': -1})
    .limit(5)
    .exec(function(err, users) { ...code... });
Run Code Online (Sandbox Code Playgroud)

这很棒,但我还想做一个像" user12高分榜上有什么位置?"的查询.

这可能以某种方式通过查询实现吗?

小智 7

如果您不必实时获得该位置,Neil Lunn的答案是完美的.但是,如果您的应用始终在此集合中插入数据,则对于新数据,您无法获得该展示位置.

这是另一个解决方案:

首先,在此集合中的字段分数上添加索引.然后使用查询db.highscores.count({score:{$gt: user's score}).它将计算分数大于目标的文档.这个数字是展示位置.