L'ordre des conditions dans votre requête n'affecte pas si elle peut utiliser un index ou non.
par exemple, structure de document type :
{
"FieldA" : "A",
"FieldB" : "B"
}
Si vous avez un index composé sur A et B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Ensuite, les deux requêtes suivantes pourront utiliser cet index :
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Ainsi, l'ordre des conditions dans la requête n'empêche pas l'index d'être utilisé - ce qui, je pense, est la question que vous posez.
Vous pouvez facilement tester cela en essayant les 2 requêtes dans le shell et en ajoutant .explain()
après la trouvaille. Je l'ai juste fait pour confirmer, et ils ont tous deux montré que l'index composé était utilisé.
cependant, si vous exécutez la requête suivante, cela n'utilisera PAS l'index car FieldA n'est pas interrogé :
db.MyCollection.find({FieldB : "B"})
C'est donc l'ordre des champs dans l'index qui définit s'il peut être utilisé par une requête et non l'ordre des champs dans la requête elle-même (c'est ce à quoi Lucas faisait référence).