【发布时间】:2020-10-03 22:02:28
【问题描述】:
它来自 MongoDB:权威指南。首先,我们通过{"age": 1, "username": 1} 索引users 集合。据说,age字段严格按照升序排列,每个年龄内username的字段也是升序排列。
查询 1:db.user.find({"age": 21}).sort({"username": -1})
在查询 1 中,MongoDB 从 {"age": 21} 的最后一个匹配项开始,并以相反的顺序遍历索引。这样,我们得到username 的降序排列。这意味着,MongoDB 线性选择文档
问题 2:db.users.find({"age": {"$gte": 21, "$lte": 30}}).sort({"username" : 1})
但是现在,在查询 2 中,它表示索引没有按排序顺序返回 usernames,因此 MongoDB 必须在返回之前对内存中的结果进行排序。因此,为了以有序的方式获得usernames,我们必须以相反的顺序设置索引,即{"username": 1, "age": 1}。现在在这里,如果 MongoDB 线性选择 ages,那么 usernames 必须按升序排列。但这里不是这样,为什么会这样?
【问题讨论】: