Я создал приложение, использующее MongoDB 3.2. Я пытаюсь перенести его в MongoDB 3.4, поскольку он включает в себя несколько очень необходимых функций. Большая часть миграции прошла гладко, за исключением одного – агрегатных функций. Мои текущие агрегированные функции выглядят так:
$collection = $mongo->getCollection('users'); $results = $collection->aggregate(array( array('$match' => array('_id' => $_SESSION['user'])), array('$project' => array('viewed_cases' => 1)), array('$unwind' => '$viewed_cases'), ));
Однако это порождает эти проблемы в mongod:
Использование команды агрегата без опции «курсор» устарело. См. Http://dochub.mongodb.org/core/aggregate-without-cursor-deprecation .
После прочтения документации я попытался изменить функцию на это, добавив курсор с установкой batchSize в значение по умолчанию (попытка добавить только курсор с пустым массивом, как это предложено в документации, вызвала сбой PHP):
$collection = $mongo->getCollection('users'); $results = $collection->aggregate(array( array('$match' => array('_id' => $_SESSION['user'])), array('$project' => array('viewed_cases' => 1)), array('$unwind' => '$viewed_cases'), ), array('cursor' => array('batchSize' => 101)));
Однако это изменяет ответ, отправленный на $ results. Вместо массива выглядит так:
array(2) { ["result"]=> array(4) { [0]=> array(2) { ["_id"]=> string(4) "idan" ["viewed_cases"]=> array(2) { ... } } } }
которые я получил через $ results ['result'], теперь я получаю следующее:
array(2) { ["cursor"]=> array(3) { ["id"]=> object(MongoInt64)#10 (1) { ["value"]=> string(1) "0" } ["ns"]=> string(10) "work.users" ["firstBatch"]=> array(4) { [0]=> array(2) { ["_id"]=> string(4) "idan" ["viewed_cases"]=> array(2) { ... } } } } }
С этой реализацией, помимо того факта, что она требует изменения всех вызовов на $, приводит ко всей системе, меня беспокоят непредвиденные результаты в будущем, учитывая, что все находится под «firstBatch». Я предполагаю, что мне нужно будет создать поддержку для получения следующих партий, что в настоящее время не так.
Есть ли способ изменить исходную 3.2-поддерживающую агрегированную функцию выше, чтобы быть совместимой с 3.4 без изменения ответа, отправленного на $ results?
заранее спасибо