例如,按此顺序使用涉及字段find()
和a
的{{1}}。例如,
b
我的集合索引数组中有两个键:
db.collection.find({'a':{'$lt':10},'b':{'$lt':5}})
保证 mongo会使用第一个密钥,因为它更准确地匹配查询,还是随机选择两个密钥中的任何一个,因为它们都可以工作?
答案 0 :(得分:5)
MongoDB有一个查询优化器,可以选择最有效的索引。来自docs:
MongoDB查询优化器处理查询并选择最多 给定可用索引的查询的有效查询计划。
所以它没有严格保证(但我希望较小的指数会比较大的复合指数更快地产生结果)。 您还可以使用hint运算符强制查询优化器使用指定的索引。
db.collection.find({'a':{'$lt':10},'b':{'$lt':5}}).hint({a:1, b:1});
但是,您示例中的这两个索引是多余的。这是因为复合索引支持对任何prefix of index字段的查询。
以下索引:
db.collection.ensureIndex({a: 1, b: 1, c: 1});
可以支持包含a
,a
和b
以及a
和b
以及c
的查询,但不是< / em>仅b
或c
,或仅b
和c
。
答案 1 :(得分:0)
您并使用$ exist ,,如果为true,则$ exists匹配包含该字段的文档,包括字段值为null的文档。如果为false,则查询仅返回不包含该字段的文档。
查询将是
db.inventory.find( { "key.a": { $exists: true, 1 },"key.b": { $exists: true, 1 } } )