El orden de las condiciones en su consulta no afecta si puede usar un índice o no.
por ejemplo, estructura típica de un documento:
{
"FieldA" : "A",
"FieldB" : "B"
}
Si tiene un índice compuesto en A y B:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Luego, las dos consultas siguientes podrán usar ese índice:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Entonces, el orden de las condiciones en la consulta no impide que se use el índice, que creo que es la pregunta que está haciendo.
Puede probar esto fácilmente probando las 2 consultas en el shell y agregando .explain()
después del hallazgo. Solo hice esto para confirmar, y ambos mostraron que se usó el índice compuesto.
sin embargo, si ejecuta la siguiente consulta, NO usará el índice ya que FieldA no se está consultando:
db.MyCollection.find({FieldB : "B"})
Por lo tanto, es el orden de los campos en el índice lo que define si puede ser utilizado por una consulta y no el orden de los campos en la consulta en sí (a esto se refería Lucas).