2017-08-30 65 views
1

我在MongoDB中使用索引。我有一个查询,使得:MongoDB查询涉及一些字段的索引和一些不是

db.collection.find({field1:"val1",field2:"val2",field3:"val3"}) 

其中“FIELD1”和“FIELD2”是一个复合索引但“字段3”的部分不是任何索引的一部分。 我的问题是将会对整个集合执行集合扫描以匹配'field3'的值,还是'field1'和'field2'上索引的存在会限制要扫描'field3'值的文档数量?

提前感谢您的时间。

+1

你应该看看的[解释()](HTTPS://docs.mongodb .com/manual/reference/method/cursor.explain /)。这会告诉你到底你在找什么 – felix

回答

1

是该指数将使用

我通过创建包含文档的集合测试了:

{ "a" : 1, "b" : 1, "c" : 1 } 
{ "a" : 2, "b" : 2, "c" : 2 } 
{ "a" : 3, "b" : 3, "c" : 3 } 

并添加一个索引:

db.indexTest.createIndex({"a":1,"b":1}) 

查询场上 “C” 独退货说明:

"winningPlan" : { 
      "stage" : "COLLSCAN", 
      "filter" : { 
       "c" : { 
        "$eq" : 3 
       } 
      }, 
      "direction" : "forward" 
     }, 

其中作为查询中的“一”,“b”和“c”的返回一个解释使用索引:

"winningPlan" : { 
      "stage" : "FETCH", 
      "filter" : { 
       "c" : { 
        "$eq" : 3 
       } 
      }, 
      "inputStage" : { 
       "stage" : "IXSCAN", 
       "keyPattern" : { 
        "a" : 1, 
        "b" : 1 
       }, 
       "indexName" : "a_1_b_1", 
       "isMultiKey" : false, 
       "multiKeyPaths" : { 
        "a" : [ ], 
        "b" : [ ] 
       },