A ordem das condições em sua consulta não afeta se ela pode usar um índice ou não.
por exemplo, estrutura de documento típica:
{
"FieldA" : "A",
"FieldB" : "B"
}
Se você tiver um índice composto em A e B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Em seguida, ambas as consultas a seguir poderão usar esse índice:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Portanto, a ordenação das condições na consulta não impede que o índice seja usado - o que acho que é a pergunta que você está fazendo.
Você pode testar isso facilmente testando as 2 consultas no shell e adicionando
.explain()
após o achado. Eu só fiz isso para confirmar, e ambos mostraram que o índice composto foi usado. no entanto, se você executar a consulta a seguir, isso NÃO usará o índice, pois o CampoA não está sendo consultado:
db.MyCollection.find({FieldB : "B"})
Portanto, é a ordenação dos campos no índice que define se ele pode ser usado por uma consulta e não a ordenação dos campos na própria consulta (era a isso que Lucas se referia).