MongoDB 文档
https://docs.mongodb.com/manual/tutorial/sort-results-with-indexes/#sort-on-multiple-fields:
对于使用复合索引进行排序的查询,cursor.sort() 文档中所有键的指定排序方向必须与索引键模式匹配或与索引键模式的逆匹配。例如,索引键模式 { a: 1, b: -1 } 可以支持对 { a: 1, b: -1 } 和 { a: -1, b: 1 } 的排序,但不支持对 { a: - 1, b: -1 } 或 {a: 1, b: 1}。
索引可以支持对索引键模式的非前缀子集的排序操作。为此,查询必须在排序键之前的所有前缀键上包含相等条件。
问题
好的,所以给定一个 index {a: 1, b: 1, c: 1, d: 1}
,第一句话说我可以做 sorts{a: 1, b: 1, c: 1, d: 1}
和它的 inverse {a: -1, b: -1, c: -1, d: -1}
。惊人的。第二个引用说我可以使用索引来查询索引前缀并按索引“后缀”排序(如果我可以创造那个术语),例如db.Foo.find({a: 52, b: {$lt: 5}, c: {$gte: 12}}).sort({d: 1})
. 也很棒。
那么我的问题是,db.Foo.find({a: 52, b: {$lt: 5}, c: {$gte: 12}}).sort({d: -1})
(注意降序排列d
)会匹配索引{a: 1, b: 1, c: 1, d: 1}
吗?它会在幕后反转索引并使用{a: -1, b: -1, c: -1, d: -1}
吗?据我所知,mongo 的文档没有涵盖这种情况。