我正在尝试在 mongoose 中创建排行榜,但在通过分数递增来索引我的分数模式时遇到了问题。
这是我的代码:
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 } ]
关于为什么排序不正确的任何想法?我一直在查看其他工作和示例,但看不出哪里出了问题。
最佳答案
你的问题不是很清楚,如果你对你的问题提出疑问可能会有用。但这里有一些可以帮助您的线索。
- 您必须意识到您正在创建一个复合索引。这意味着索引将以用户作为第一个参数,然后是分数。
- 确保您正在调用排序 方法。通常认为索引将维护我们的集合在磁盘上的顺序。这不是真的。您可以将索引视为对集合中文档的引用表,该集合根据您在索引配置中设置的内容进行排序。因此,尽管您将索引配置为按分数 排序,但这并不意味着集合将在磁盘中排序,并且当您进行查询获取所有内容时,它将显示在数据在集合中的顺序不是您想要的顺序。
希望对您有所帮助。
此外,您还可以阅读我发现有用的有关 mongo 排序和索引的文档:mongo sort , mongo indexes .
关于node.js - Mongoose 按分数索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060598/