Редът на условията във вашата заявка не влияе върху това дали може да използва индекс или не.
например типична структура на документа:
{
"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"})
Така че подреждането на условията в заявката не пречи на индекса да се използва – което според мен е въпросът, който задавате.
Можете лесно да тествате това, като изпробвате 2-те заявки в обвивката и добавите .explain()
след находката. Направих това просто, за да потвърдя и и двете показаха, че е използван комбинираният индекс.
обаче, ако изпълните следната заявка, това НЯМА да използва индекса, тъй като FieldA не се отправя към:
db.MyCollection.find({FieldB : "B"})
Така че подреждането на полетата в индекса определя дали може да се използва от заявка, а не подреждането на полетата в самата заявка (това имаше предвид Лукас).