我想知道是否说sort(a:-1)
会在ensured
上使用索引a
,但方向相反(即:a:1
)。
我猜这对于单个密钥索引是正确的,但我只是想确定,因为我无法在MongoDB文档中找到该信息。
答案 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。