【问题标题】:Mongoose indexing by score猫鼬按分数索引
【发布时间】:2016-10-29 20:37:38
【问题描述】:

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

关于为什么它没有正确排序的任何想法?我一直在查看其他工作和示例,但看不出我哪里出错了。

【问题讨论】:

  • 排序和索引不是一回事。 stackoverflow.com/questions/25449570/…
  • @BrianGlaz 我明白这一点,但我想索引我的数据,以便每次保存新条目时,它都会按分数降序保存,这样我将始终拥有前 10 个分数我的数据库排名前 10 位。

标签: node.js mongodb sorting indexing mongoose


【解决方案1】:

您的问题并不完全清楚,如果您对您的问题提出疑问,可能会很有用。但是这里有一些可以帮助你的线索。

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

希望这对您有所帮助。

此外,您还可以阅读我认为有用的有关 mongo 排序和索引的文档:mongo sortmongo indexes

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2017-09-04
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2017-01-26
    • 2018-01-10
    • 2017-01-14
    相关资源
    最近更新 更多