У меня есть коллекция под названием «записи» с десятками миллионов документов. Имеет следующий индекс:
{
"v" : 2,
"key" : {
"added_on" : -1,
"instance" : 1,
"invisible" : -1,
"reviewed" : -1
},
"name" : "added_on_index",
"ns" : "test.records"},
Я пытаюсь выполнить следующую функцию, которая пытается определить самую старую запись, которая не проверена.
$collection = $this->mongo->getCollection('records');
$cursor = $collection->find(array('instance' => $instance, 'reviewed' => false), array('added_on' => 1))->sort(array('added_on' => 1))->limit(1);
Я могу ошибаться, но я прочитал в книге, из которой я узнал MongoDB, что это должно работать — при выполнении сортировки используйте поле сортировки в качестве первого поля индекса.
Однако в качестве выигрышного плана выбран другой индекс:
[winningPlan] => Array
(
[stage] => PROJECTION
[transformBy] => Array
(
[added_on] => 1
)
[inputStage] => Array
(
[stage] => SORT
[sortPattern] => Array
(
[added_on] => 1
)
[limitAmount] => 1
[inputStage] => Array
(
[stage] => SORT_KEY_GENERATOR
[inputStage] => Array
(
[stage] => FETCH
[inputStage] => Array
(
[stage] => IXSCAN
[keyPattern] => Array
(
[instance] => 1
[invisible] => 1
[reviewed] => 1
)
[indexName] => module_record_retrieval
[isMultiKey] =>
[multiKeyPaths] => Array
(
[instance] => Array
(
)
[invisible] => Array
(
)
[reviewed] => Array
(
)
)
[isUnique] =>
[isSparse] =>
[isPartial] =>
[indexVersion] => 2
[direction] => forward
[indexBounds] => Array
(
[instance] => Array
(
[0] => [ObjectId('58b28de67289ba94352c90bd'), ObjectId('58b28de67289ba94352c90bd')]
)
[invisible] => Array
(
[0] => [MinKey, MaxKey]
)
[reviewed] => Array
(
[0] => [false, false]
)
)
)
)
)
)
)
При попытке добавить подсказку (‘Added_on_index’) в функцию поиска, даже $ cursor-> объяснение () застревает на то, что, кажется, огромное количество времени.
Любая помощь в решении этой проблемы будет принята с благодарностью.
Задача ещё не решена.
Других решений пока нет …