クエリ内の条件の順序は、インデックスを使用できるかどうかには影響しません。
例:一般的なドキュメント構造:
{
"FieldA" : "A",
"FieldB" : "B"
}
AとBに複合インデックスがある場合:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
そうすれば、次の両方のクエリでそのインデックスを使用できるようになります。
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
したがって、クエリ内の条件の順序によって、インデックスの使用が妨げられることはありません。これが、あなたが尋ねている質問だと思います。
シェルで2つのクエリを試し、.explain()
を追加することで、これを簡単にテストできます。 見つけた後。確認のためにこれを行ったところ、両方とも複合インデックスが使用されていることが示されました。
ただし、次のクエリを実行すると、FieldAがクエリされないため、インデックスは使用されません。
db.MyCollection.find({FieldB : "B"})
したがって、クエリで使用できるかどうかを定義するのはインデックス内のフィールドの順序であり、クエリ自体のフィールドの順序ではありません(これはLucasが参照していたものです)。