1

一种关于 mongodb 的基本概念问题。预先感谢您的帮助。

如果我在mongodb中有一个使用非主键索引的复合索引,并且我运行一个查询,为什么理论上仍然需要对返回结果进行排序,索引本身不应该按排序顺序扫描文档吗?这是我试图理解的一个简单示例:

文档如下所示:

{"_id":123,
 "firstName":"John",
 "lastName":"Doe",
 "email":"email@email.com"}

如果这是索引:

db.getCollection('people').createIndex({ 
    "email": "email@email.com"  
    "lastName": 1,
    "firstName": 1
})

如果我想通过电子邮件返回按姓氏排序的文档列表,为什么仍然需要按姓氏排序的 .sort ({ ... })?:

db.getCollection('people').find({"email":"email@email.com"})
    .sort({"lastName":1 }) 

谢谢您的帮助,

4

1 回答 1

0

该索引不会“覆盖”查询,因此 MongoDB 仍然需要单独读取匹配的文档。而且由于您没有指定排序顺序,MongoDB 可以自由地以它认为最简单/最有效的任何顺序读取和返回文档,这可能是文档存储在磁盘上的顺序。

于 2018-06-15T01:46:59.693 回答