2017-08-30 8 views
1

MongoDBでインデックスを使用しています。私は、クエリを有するように:「フィールド1」と「フィールド2」は、複合インデックスが、「フィールド3」の一部であるインデックスが付けられたフィールドと関連しないフィールドを含むMongoDBクエリ

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

は、任意のインデックスの一部ではありません。 私の質問は、 '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" 
     }, 

ここで、 "A" に照会として、 "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" : [ ] 
       }, 
関連する問題