可以创建未排序的mongoDB索引


Is is possible to create mongoDB indexes that are not sorted?

我有一个通过PHP创建的mongoDB集合。现在我想对几个字段进行索引,但是php文档没有讨论如何不对索引应用排序!

例如,我想对field1、field2、field3进行索引,并按field3对整个内容进行排序。

由于我将根据field1和field2搜索集合,我想确保它们有索引,但当集合从find()操作返回时,我只希望它按field3排序。

有什么想法吗?

在完全回答您的问题之前,我想给您一些背景信息会很有用:

当mongo在集合上创建索引时,它本质上是根据索引键对集合进行排序。因此,当您从使用索引的查询中获得结果时,结果将按该索引的键进行排序。如果查询在字段1上使用基本索引,那么根据定义,结果将根据该索引进行排序。

不过,有几种方法可以解决这个问题。一个简单的方法是

1) 查询字段1

2) 使用字段3 对1)的结果进行排序

如果我正确理解你的评论,这将为你带来你想要的输出。然而,它的缺点是需要两项主要工作,根据数据的大小,这可能会很昂贵。

还有另一种方法可以解决您的问题:复合索引。复合索引使用多个键来生成一个索引,该索引基于这两个键进行排序。这里有一些文档:http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeys,如果你想更深入地研究这个主题,关于复合索引还有很多堆栈溢出的问题。

此外,如果您想在mongodb中获得一些关于索引(和复合索引)的一般信息,请查看http://www.mongodb.org/display/DOCS/Indexing+建议+和+常见问题解答#索引建议和FAQ-1。搜索栏必须是索引中使用的弹性栏。我希望这整份文件对你真的有用。

使用复合索引虽然优雅而适当,但肯定比在查询后仅使用排序更复杂。如果你愿意花时间研究它,尽管我相信你会发现它会帮助你找到一个好的解决方案。

希望这能有所帮助!

否,不能将复合索引的整体排序顺序与单个索引组件的排序顺序分开。

因此,在您的示例中,一个在field1、field2上、在field3上排序的查询需要复合field1、field2、field3索引来支持索引辅助排序。但是,如果结果中返回了多个field1、field 2组合,则该索引对排序没有帮助;在这种情况下,将需要内存中的排序。