L'ordine delle condizioni nella tua query non influisce sulla possibilità di utilizzare un indice o no.
ad es. struttura tipica del documento:
{
"FieldA" : "A",
"FieldB" : "B"
}
Se hai un indice composto su A e B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Quindi entrambe le seguenti query potranno utilizzare quell'indice:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Quindi l'ordinamento delle condizioni nella query non impedisce l'utilizzo dell'indice, che penso sia la domanda che stai ponendo.
Puoi testarlo facilmente provando le 2 query nella shell e aggiungendo .explain()
dopo il ritrovamento. L'ho fatto solo per confermare ed entrambi hanno mostrato che è stato utilizzato l'indice composto.
tuttavia, se esegui la seguente query, NON utilizzerà l'indice poiché FieldA non viene interrogato su:
db.MyCollection.find({FieldB : "B"})
Quindi è l'ordine dei campi nell'indice che definisce se può essere utilizzato da una query e non l'ordine dei campi nella query stessa (questo era ciò a cui si riferiva Lucas).