Mongo复合索引和排序方向

时间:2011-10-20 17:30:52

标签: sorting mongodb sortdirection

如果我有一个大型集合(40米+对象),我正在寻找:

(a : 1 OR b : 2) && c : 3
sorted by d : 1

我知道我会创建一个索引:

{ "a":1, "b":1, "c":1, "d":1 }

但是如果我想允许反转排序顺序,我是否需要一个额外的索引:

 { "a":1, "b":1, "c":1, "d":-1 }

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果您希望结果按递增顺序或递减顺序排序,则复合索引可能会使您失败。请记住,复合索引按字典顺序对元组进行排序。没有理由相信元组在最后一个键(d)上总是按递增顺序排列。

您可以执行以下操作:

db.foo.find(...).sort({d:1});

db.foo.find(...).sort({d:-1});

即使在大型元组上进行排序也相当快。