我有一个存储有关文章信息的集合。该集合用于存档目的,因此它是只读的。目前只使用了两个字段:“title”和“page_length”。因为我总是对首先获得更长的文章感兴趣,所以我有以下索引:{ title: 1, page_length: -1}。
我发现排序仍然很慢,因为集合非常大并且不适合内存。
假设我在这个集合上使用的几乎每个查询都需要排序({page_length:-1}),有没有办法简单地将记录按 page_length 降序存储在磁盘上?换句话说,有没有一种简单的方法可以让集合中的第一条记录成为最大的 page_length 值,第二条记录成为第二大,以此类推?
这样我就可以使用 limit(n) 抓取前 n 条记录,而无需运行排序。有任何想法吗?
更新更多信息:
我将其用于搜索自动完成功能,因此速度至关重要。我一直在使用的查询如下所示:
db.articles.find({"title": /^SomeKeyword/}).sort({page_length:-1})
我很高兴创建多个索引,因为插入不是问题,我只想最大化读取速度。
编辑:作为参考,我实际上能够通过使用 find().forEach() 将集合中的记录重新组织到一个新集合中。然后我搜索了集合,并在不需要任何排序的情况下抓取了前 N 个结果,效果非常好。请注意,这只有效,因为我的数据集永远不会改变。