Rækkefølgen af betingelserne i din forespørgsel påvirker ikke, om den kan bruge et indeks eller ej.
f.eks. typisk dokumentstruktur:
{
"FieldA" : "A",
"FieldB" : "B"
}
Hvis du har et sammensat indeks på A og B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Så vil begge følgende forespørgsler være i stand til at bruge det indeks:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Så rækkefølgen af betingelserne i forespørgslen forhindrer ikke indekset i at blive brugt - hvilket jeg tror er det spørgsmål, du stiller.
Du kan nemt teste dette ved at prøve de 2 forespørgsler i shellen og tilføje .explain()
efter fundet. Jeg gjorde det bare for at bekræfte, og de viste begge, at det sammensatte indeks blev brugt.
men hvis du kører følgende forespørgsel, vil dette IKKE bruge indekset, da felt A ikke forespørges på:
db.MyCollection.find({FieldB : "B"})
Så det er rækkefølgen af felterne i indekset, der definerer, om det kan bruges af en forespørgsel og ikke rækkefølgen af felterne i selve forespørgslen (det var det, Lucas henviste til).