mongoose按分数进行索引

我正在尝试在mongoose中创build一个排行榜,并且正在通过提升分数来索引我的分数模式。

这里是我的代码:

db.once('open', function callback () { console.log('Successfully connected to MongoDB'); var scoresSchema = new Schema ({ score: Number, user: String }, {autoIndex: false}); scoresSchema.index({ user: 1, score: -1 }); StatScore = mongoose.model('Score', scoresSchema); }); 

它的输出如下

 [ { _id: 57715497860521f404cfebf0, score: 87, user: 'seth', __v: 0 }, { _id: 577157151f39c2320548e6e5, score: 99, user: 'seth', __v: 0 }, { _id: 57716a4613e701890608d18a, score: 97, user: 'seth', __v: 0 }, { _id: 57716a7413e701890608d18b, score: 135, user: 'john', __v: 0 } ] 

任何想法,为什么它不正确sorting? 我一直在看其他的工作和例子,不能看到哪里会出错。

你的问题并不完全清楚,如果你把你的问题放在你的问题上可能是有用的。 但是在这里你有一些可以帮助你的线索。

  • 您必须意识到您正在创build复合索引。 这意味着索引将以用户作为第一个参数,然后评分
  • 确保你正在调用sorting方法。 通常认为索引会保持我们在磁盘上订购的collections。 这不是真的。 您可以将索引视为集合上文档引用的表格,该集合根据您在索引configuration中设置的内容进行sorting。 因此,尽pipe您已将索引configuration为按分数进行sorting,但这并不意味着集合将在磁盘中sorting,而且当您执行查询获取所有内容时,将按照数据在你想要的订单不是必需的集合。

希望这对你有帮助。

另外,你可以阅读这个关于mongo上我发现有用的sorting和索引的文档: mongo sort , mongo indexes 。