MongoCursorTimeoutException для агрегатной функции

Я пытаюсь получить некоторые данные из коллекции Mongo, используя функцию aggregate, но это дает мне MongoCursorTimeoutException. Я пытаюсь выбрать только пятьдесят записей за раз, и коллекция имеет более 17 миллионов записей. Это делается из PHP, а мой код выглядит следующим образом:

$data = $my_collection->aggregate(array( array('$match'=>$filter_query), array('$group'=>array('_id'=>'$email')), array('$skip'=>$offset), array('$limit'=>$per_page) )); 

и $ filter_query – это еще один массив, содержащий временную карту, и это похоже на

 Array ( [timestamp] => Array ( [$gt] => 1383890400 [$lt] => 1384495200 ) ) 

Я не знаю, почему это происходит, поскольку я пытаюсь получить только 50 записей. Я думаю, что agrression выполняется после выбора всех записей и вызывает ошибку. Любой лучший способ сделать это, кроме агрессии?

Я могу установить тайм-аут на -1, но является ли это хорошим вариантом, поскольку драйвер будет ждать навсегда, чтобы получить первоначальный ответ?

Чтобы установить параметр таймаута для агрегатной функции, вы должны использовать функцию команды экземпляра объекта MongoDB. Например:

 $result = $database->command( array( 'aggregate' => $my_collection, 'pipeline' => array( array('$match' => $filter_query), array('$group' => array('_id'=>'$email')), array('$skip'=>$offset), array('$limit'=>$per_page) ) ), array( 'timeout' => $timeout ) ); 

Для получения дополнительной информации см. Документацию