У меня есть коллекция таких городов
{ "name": "something","population":2121}
В одной коллекции есть тысячи таких документов
, теперь я создал такой индекс
$coll->ensureIndex(array("name" => 1, "population" => -1),
array("background" => true));
сейчас я хочу запросить вот так
$cities = $coll->find(array("name" => array('$regex' => "^$name")))
->limit(30)
->sort(array("name" => 1, "population" => -1));
Но это возвращает города в порядке возрастания населения.Но я хочу, чтобы результат был в порядке убывания населения, т.е.
Любая идея ???
РЕДАКТИРОВАТЬ: я создал отдельные индексы по имени и населению.Ниже приводится вывод db.city_info.getIndexes () и db.city_info.find ({"name": {"$ regex": "^ Ban"}}). Sort ({"population": -1}). Объяснить();соответственно
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "city_database.city_info",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"name" : 1
},
"ns" : "city_database.city_info",
"background" : 1,
"name" : "ascii_1"
},
{
"v" : 1,
"key" : {
"population" : 1
},
"ns" : "city_database.city_info",
"background" : 1,
"name" : "population_1"
}
]
и
{
"cursor" : "BtreeCursor ascii_1 multi",
"nscanned" : 70739,
"nscannedObjects" : 70738,
"n" : 70738,
"scanAndOrder" : true,
"millis" : 17461,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"name" : [
[
"Ban",
"Bao"
],
[
/^Ban/,
/^Ban/
]
]
}
}
Просто посмотрите на время, затраченное на запрос: - (