提问者:小点点

在MongoDB中查询两个索引字段(不是复合字段)时会发生什么


如果两个字段不是复合索引的一部分,那么当您查询这两个字段时会发生什么情况,例如:

db.collection.ensureIndex( { a: 1 } )
db.collection.ensureIndex( { b: 1 } )

db.collection.find( { a: 2, b: 2 } )

我想知道是否会扫描大量文档,或者Mongo DB不会扫描任何内容,而将返回:

indexOnly: YES

共1个答案

匿名用户

只有当您要查找的所有值都在index中(包括sort)时,explain才返回。基本上,它表示覆盖的索引:http://docs.mongodb.org/manual/applications/indexes/texcreate-indexs-that-support-covered-queries

在本例中,您按两个字段进行查询,但其中只有一个字段位于一个单独的索引中。

考虑到MongoDB不能对单个子句使用多个索引(codeor/code>是例外,因为这里它是多子句,它也不同于普通查询),它将不执行查询,而是通过上的索引搜索集合,然后对该范围内包含的文档进行完整文档扫描,以了解其值并返回结果。

还要注意,要正确使用游标,您应该使查询的以下部分适合于单个索引:

即:

db.ensureIndex({a:1,b:1});
db.col.find({a:1}, {_id:0,a:1,b:1}).sort({b:1});

将使用游标。