Mongodb 设置文档';s在集合中的排名取决于分数

Mongodb 设置文档';s在集合中的排名取决于分数,mongodb,mongoose,Mongodb,Mongoose,我收集了一系列高分文档,如下所示: { "data": { "highscores": [ { "id": "58c02942f9256663764edc3d", "userName": "user3", "score": 123, "rank": null }, { "id": "58c02957f9256663764edc3e", "userName

我收集了一系列高分文档,如下所示:

{
  "data": {
    "highscores": [
      {
        "id": "58c02942f9256663764edc3d",
        "userName": "user3",
        "score": 123,
        "rank": null
      },
      {
        "id": "58c02957f9256663764edc3e",
        "userName": "user2",
        "score": 444,
        "rank": null
      },
      {
        "id": "58c02966f9256663764edc3f",
        "userName": "user1",
        "score": 64,
        "rank": null
      },
      {
        and more...
      }
    ]
  }
}
现在我用这行代码显示一个排序的高分列表:

this.model.find({}).sort({ score: -1 }).limit(5);
但我想按排名排序,这样我就可以按排名值跳转到该文档(例如,显示之后的9个文档)。但我不知道如何遍历集合并根据用户的得分值设置排名。有人能帮忙吗

编辑:分数越高,排名越高。所以在这个示例中,列表user2是第一位(排名1),user3是第二位(排名2),user1是第三位


编辑2:我在用猫鼬。有些功能存在于本机MongoDB中,但不存在于Mongoose中。

使用本机驱动程序,可以通过以下方式完成:

var results=db.ranks.find().sort({score:-1}).limit(3).toArray()

for(var i=0;i<results.length;i++)
{    db.ranks.update({id:results[i].id}, {$set: {rank: i+1}}, {multi:true})
}
var results=db.ranks.find().sort({score:-1}).limit(3).toArray()

对于(var i=0;i好的,我在猫鼬中使用了它。感谢Astro帮助我朝着正确的方向看:

  return this.model.find({}).sort({ score: -1 }).exec((err, docs) => {
  for (var i = 0; i < docs.length; i++) {
    this.model.update({ _id: docs[i].id }, { $set: { rank: i + 1 } }, { multi: true }).exec();
  }
返回this.model.find({}).sort({score:-1}).exec((err,docs)=>{
对于(变量i=0;i
您没有描述排名和分数之间的关系。对不起,您是对的。您可以按分数排序,并将排名设置为分数的索引result@Astro我该怎么做呢?非常感谢你的回答,我没有说的一件事是我在使用mongoose。遗憾的是,没有toArray()函数。