Mongoose按分数进行索引

3

我正在尝试在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 } ]

有什么想法不排序的原因吗?我一直在查看其他的工作和例子,但是找不到我的错误在哪里。

排序和索引不是同一回事。http://stackoverflow.com/questions/25449570/mongoose-default-sorting-order - Brian Glaz
@BrianGlaz 我明白,但我想索引我的数据,以便每次保存新条目时,它都会按照得分降序保存,这样我将始终拥有数据库中的前10个分数作为前10个分数。 - KI17
1个回答

1

你的问题并不是很清楚,如果你在问题中提供查询内容会更有帮助。但是这里有一些提示可以帮助你。

  • 你必须意识到你正在创建一个复合索引。这意味着索引将按照用户作为第一个参数进行排序,然后是得分
  • 确保你调用了sort方法。通常认为索引将维护我们的集合在磁盘上的顺序。但这并不是真的。你可以将索引视为对集合中文档的引用表,该表根据索引配置设置进行排序。因此,尽管你已经配置了索引按得分排序,这并不意味着集合在磁盘上排序,当你查询获取所有内容时,它将按照数据在集合中发现的顺序显示,这不一定是你想要的顺序。

希望这能对你有所帮助。

此外,您可以阅读我发现有用的关于MongoDB排序和索引的文档:mongo sortmongo indexes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接