Ошибка курсора на курсоре MongoDb

Я только что начал использовать mongoDb в качестве моего backend для PHP.

Я просто использую запрос find() для одной из моих потребностей. Я хочу только первые 100 результатов, но также хочу получить итоговые результаты. Я пытаюсь это сделать.

$cursor = $this->dbReference->dbName->find($query);
 if($count != 0)
 {
 $cursor->skip($startIndex);
 $cursor->limit($count);
 }
 $totalCount = $cursor->count();
 $entries = array();
 while ($cursor->hasNext())
 {
 $cursor->next();
 $entry = $cursor->current();
 array_push($entries , $entry);
 }

Теперь проблема в том, что T его результат поиска содержит ровно более 50 тыс. результатов. Но я получаю только 100 за раз. Я использую $cursor- > count() для получения общего количества доступных строк результата. на этой строке ошибка показывает, что "Cursor timed out". Пожалуйста, кто-нибудь может предложить мне, в чем проблема? или что является альтернативой для поиска общего количества результатов поиска.

Спасибо заранее.

3 ответа

Вы можете решить проблему ограничения времени курсора, добавив этот код до find():

MongoCursor::$timeout = -1;
$cursor = $this->dbReference->dbName->find($query);


Я только что попробовал это с 100 000 простых документов. $totalCount для меня всегда 100000, независимо от того, установлены ли $count и $startIndex (это правильное поведение). $entries содержит все 100000 записей. Вся операция занимает около 3 секунд на моей локальной настройке.

Используете ли вы удаленную базу данных? Возможно, что сеть является причиной таймаута, а не MongoDB.

Какой размер ваших документов? Объем данных может влиять на скорость.


Я обнаружил, что → count() также выдает время выполнения, пока оно не истечет. Для меня лучше всего использовать find(), а затем поместить нужный элемент в курсор в массив, используя цикл foreach. После этого выполните array_count_values ​​() в этом массиве. Кажется, это тоже немного быстрее.

Спасибо за MongoCursor:: $timeout = -1, я думаю, что это действительно помогло и в моей ситуации.

Волшебным образом нет более ужасных сообщений о тайм-аутах.

licensed under cc by-sa 3.0 with attribution.