Kolejność warunków w zapytaniu nie ma wpływu na to, czy może używać indeksu, czy nie.
np. typowa struktura dokumentu:
{
"FieldA" : "A",
"FieldB" : "B"
}
Jeśli masz indeks złożony na A i B :
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Wtedy oba poniższe zapytania będą mogły korzystać z tego indeksu:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Tak więc kolejność warunków w zapytaniu nie uniemożliwia użycia indeksu - myślę, że jest to pytanie, które zadajesz.
Możesz to łatwo przetestować, wypróbowując 2 zapytania w powłoce i dodając .explain()
po znalezisku. Zrobiłem to tylko, aby potwierdzić, i obaj wykazali, że użyto indeksu złożonego.
jednak, jeśli uruchomisz następujące zapytanie, NIE użyje to indeksu, ponieważ pole A nie jest pytane:
db.MyCollection.find({FieldB : "B"})
Zatem to kolejność pól w indeksie określa, czy może być ona użyta w zapytaniu, a nie kolejność pól w samym zapytaniu (do tego miał na myśli Lucas).