如果确保索引在`sort()`的相反方向上,它会被使用吗?

时间:2014-07-13 07:10:09

标签: mongodb sorting

我想知道是否说sort(a:-1)会在ensured上使用索引a,但方向相反(即:a:1)。

我猜这对于单个密钥索引是正确的,但我只是想确定,因为我无法在MongoDB文档中找到该信息。

1 个答案:

答案 0 :(得分:2)

使用单个字段索引进行排序时,键的顺序无关紧要,因为MongoDB可以在任一方向上遍历索引。 您可以使用explain命令验证:

db.coll.find().sort({a: 1}).explain();

输出的相关部分是(您应该检查输出中其他字段的docs):

"cursor" : "BtreeCursor a_-1 reverse"

reverse部分意味着MongoDB以相反的顺序遍历索引。

但是,如果您使用复合索引进行排序,则排序顺序很重要。 例如,采用以下复合索引:

db.coll.ensureIndex({a: 1, b: -1});

此索引可以支持这些排序操作:

db.coll.find().sort({a: 1, b: -1});
db.coll.find().sort({a: -1, b: 1});

但是这个索引不能支持这种排序操作:

db.coll.find().sort({a: 1, b: 1});

有关排序的详细信息,请查看documentation