mongodb中的集合扫描是什么?

mongodb中的集合扫描是什么?,mongodb,mongodb-query,Mongodb,Mongodb Query,我知道什么是“完整收集扫描”。但我有点不确定术语“集合扫描”是否适用于使用B树游标的查询。使用基本游标以外的游标的查询是否执行集合扫描?集合扫描实际上是扫描整个集合。当用户请求使用某些条件查找文档时会发生这种情况,而这些条件不能使用索引来回答。 例如,假设我们有一个用户集合,其中包含姓名、年龄、头发颜色、地址、电话号码和国家/地区等字段 user = {"name" : "ABC", "age" : 25, "hair color" : "brown",

我知道什么是“完整收集扫描”。但我有点不确定术语“集合扫描”是否适用于使用B树游标的查询。使用基本游标以外的游标的查询是否执行集合扫描?

集合扫描实际上是扫描整个集合。当用户请求使用某些条件查找文档时会发生这种情况,而这些条件不能使用索引来回答。 例如,假设我们有一个用户集合,其中包含姓名、年龄、头发颜色、地址、电话号码和国家/地区等字段

user = {"name" : "ABC",
         "age" : 25,
         "hair color" : "brown",
         "address" : "XYZ",
         "phone number" : 1234567890,
         "country" :"Canada"
       }
此外,如果我们有一个关于name的索引,并使用

 db.users.find({"name" : "ABC"});
这里,由于名称字段上有一个索引,查询优化器将使用该索引作为性能优化方法

假设您在数据库中查询其他字段。比如说,地址

db.users.find({"address" : "XYZ"});
在这里,查询优化器希望缩短查询的响应时间,但由于它没有关于集合中记录的先验信息,因此必须遍历集合中的每个文档,以查看该文档的地址字段是否与查询中的匹配。如果是这样,我们将返回该文档。我相信您知道这就是索引的作用,因为它通过根据特定标准“分组”文档来维护指针

有关更多信息,您可以查看

对于您的问题,使用B-树游标的查询是为了避免执行集合扫描,因此使用基本游标以外的任何类型的游标的查询“大部分”都会避免集合扫描


即使正在查询的字段上存在索引,也可以强制它执行集合扫描。你可以阅读它

简而言之,这两个术语是相同的,或者更确切地说,只有“完整集合扫描”


如果您的查询使用的是B-树游标,则根据定义,它不是扫描集合放置,而是遍历索引,以查找查询的文档

如果没有索引可以满足查询,则会发生集合扫描,我们必须扫描整个集合才能找到所需的文档。有关所有信息,请参阅链接


“如果您的查询使用的是B-树光标,则根据定义,它不会扫描集合”-是否始终正确?对于eg;B-树游标只能用于“排序”阶段,而查询最终可能会对“查找”阶段进行集合扫描。