Ordningen på villkoren i din fråga påverkar inte om den kan använda ett index eller inte.
t.ex. typisk dokumentstruktur:
{
"FieldA" : "A",
"FieldB" : "B"
}
Om du har ett sammansatt index på A och B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Då kommer båda följande frågor att kunna använda det indexet:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Så ordningen av villkoren i frågan hindrar inte att indexet används - vilket jag tror är frågan du ställer.
Du kan enkelt testa detta genom att prova de två frågorna i skalet och lägga till .explain()
efter fyndet. Jag gjorde bara detta för att bekräfta, och de visade båda att det sammansatta indexet användes.
men om du kör följande fråga kommer detta INTE att använda indexet eftersom fält A inte frågas på:
db.MyCollection.find({FieldB : "B"})
Så det är ordningen av fälten i indexet som definierar om den kan användas av en fråga och inte ordningen av fälten i själva frågan (det här var vad Lucas syftade på).