Порядок условий в вашем запросе не влияет на то, может ли он использовать индекс или нет.
например, типичная структура документа:
{
"FieldA" : "A",
"FieldB" : "B"
}
Если у вас составной индекс наA и B:
db.MyCollection.ensureIndex({FieldA : 1, FieldB : 1})
Тогда оба следующих запроса смогут использовать этот индекс:
db.MyCollection.find({FieldA : "A", FieldB : "B"})
db.MyCollection.find({FieldB : "B", FieldA : "A"})
Таким образом, порядок условий в запросе не препятствует индексуиспользуется - я думаю, это вопрос, который вы задаете.
Вы можете легко проверить это, попробовав два запроса в оболочке и добавив .explain()
после поиска.Я просто сделал это, чтобы подтвердить, и они оба показали, что использовался составной индекс.
однако, если вы выполните следующий запрос, он НЕ будет использовать индекс, так как FieldA не запрашивается:
db.MyCollection.find({FieldB : "B"})
Таким образом, порядок полей в индексе определяет, может ли он использоваться запросом, а не порядок полей в самом запросе (именно об этом говорил Лукас).