2017-08-30 35 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" : [ ] 
       }, 
相關問題