如果我有一个大型集合(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 }
非常感谢。
答案 0 :(得分:2)
如果您希望结果按递增顺序或递减顺序排序,则复合索引可能会使您失败。请记住,复合索引按字典顺序对元组进行排序。没有理由相信元组在最后一个键(d)上总是按递增顺序排列。
您可以执行以下操作:
db.foo.find(...).sort({d:1});
db.foo.find(...).sort({d:-1});
即使在大型元组上进行排序也相当快。