0

如果我有一个大集合(40m+ 个对象)并且我正在寻找:

(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 }

非常感谢。

4

1 回答 1

2

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

您可以简单地执行以下操作:

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

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

排序,即使是在大量元组上也是相当快的。

于 2011-10-20T18:05:04.533 回答