Mongoose按分数索引

时间:2016-06-27 18:17:07

标签: node.js mongodb sorting indexing mongoose

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

有关为何没有正确排序的任何想法?我一直在寻找其他工作和例子,看不出我哪里出错了。

1 个答案:

答案 0 :(得分:1)

您的问题并不完全清楚,如果您对自己的问题进行查询,可能会非常有用。但是在这里你有一些可以帮助你的线索。

  • 您必须知道您正在创建复合索引。这意味着将以用户作为第一个参数,然后得分来订购索引。
  • 请务必使用排序方法。通常认为索引将维护我们在磁盘上订购的集合。这不是真的。您可以将索引视为对根据您在索引配置上设置的顺序排序的集合上的文档的引用表。因此,尽管您已将索引配置为按得分排序,但这并不意味着将在磁盘中对订单进行排序,并且当您执行查询以获取所有内容时,它将显示在在集合中找到的数据顺序不是您想要的顺序。

希望这对你有所帮助。

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