MongoDB对两个没有复合索引字段的覆盖查询

MongoDB对两个没有复合索引字段的覆盖查询,mongodb,mongodb-query,Mongodb,Mongodb Query,例如,能否对两个字段执行MongoDB覆盖查询 db.collection.find( { _id: 1, a: 2 } ) 不具有复合索引,如 db.collection.ensureIndex( { _id: 1, a: 1 } ) 但是相反,只有一个索引用于_id(默认情况下是这样),另一个索引用于字段“a”,如中所示 换句话说,我想知道,为了对两个字段执行覆盖查询,我是否需要一个复合索引,而不是只需要两个单一(即非复合)索引,每个字段一个。查询只使用一个索引 您的示例将\u id显示

例如,能否对两个字段执行MongoDB覆盖查询

db.collection.find( { _id: 1, a: 2 } )
不具有复合索引,如

db.collection.ensureIndex( { _id: 1, a: 1 } )
但是相反,只有一个索引用于_id(默认情况下是这样),另一个索引用于字段“a”,如中所示

换句话说,我想知道,为了对两个字段执行覆盖查询,我是否需要一个复合索引,而不是只需要两个单一(即非复合)索引,每个字段一个。

查询只使用一个索引

您的示例将
\u id
显示为索引的元素之一<代码>\u id在集合中必须是唯一的,因此对
\u id
和其他内容进行复合索引是没有意义的

如果您有:

db.collection.ensureIndex( { a: 1, b: 1 })
然后,您可以根据需要单独使用
a
索引,或者将
b
作为复合索引,查询只使用一个

您的示例将
\u id
显示为索引的元素之一<代码>\u id在集合中必须是唯一的,因此对
\u id
和其他内容进行复合索引是没有意义的

如果您有:

db.collection.ensureIndex( { a: 1, b: 1 })
然后,您可以根据需要单独使用
a
索引,或者将其与
b

组合使用,谢谢。注释:“查询只使用一个索引。”这是怎么说的?@GSchv检查该部分的最后一行:“除了使用$or运算符的查询外,一个查询不能使用多个索引。一个查询只能使用一个索引。”还有其他地方,但这是我查找的第一个地方。这很有帮助,谢谢。注释:“查询只使用一个索引。”它在哪里这样说?@GSchv检查该部分的最后一行:“除了使用$or运算符的查询外,一个查询不能使用多个索引。一个查询只能使用一个索引。”还有其他地方,但这是我第一次查看的地方