Mongoose 在排序集合中查找文档排名

Mongoose Find Document Rank in Sorted Collection

我正在为我的用户创建一个奖励系统,我想向他们展示他们在其他用户中的排名。我试图通过一些内置的 JS 函数来实现这一点,但我做不到。

级别架构

{
  userID: String,
  xp: Number,
  lastUpdate: Number
}

我正在按“降序”对这个集合进行排序 XP:

await schemas.levels.find({}).sort({
    xp: -1
})

如何在此排序数组中获得用户排名(按用户 ID)。

您好,如果您想查找文档的位置(用户在数组中的排名)而不考虑任何顺序,目前是不可能的,因为 MongoDb 不按特定顺序存储文档.但是,有一种方法可以通过修改 return 从 mongo 编辑的数据来解决这个问题。

var docIndex = 0;
db.schemas.find({}, {
  "_id": 1
}).sort({
  "xp": -1
}).forEach(function(doc) {
  docIndex++;
  if (userID == doc["userID"]) {
    print("User's Rank is..." + docIndex);
    // Add rank to doc payload here //
    return false;
  }
});

您还可以在答案部分查看此 post Get Position of Document 它已丢失 return 文档位置

的方法