(PECL mongo >=0.9.0)
Курсор используется для итерации результатов запроса к базе данных. Например, чтобы запросить базу данных и увидеть все результаты, вы можете сделать:
Пример #1 Пример использования MongoCursor
<?php
$cursor = $collection->find();
var_dump(iterator_to_array($cursor));
?>
Обычно курсоры не создаются с помощью конструктора MongoCursor. Вы получаете новый курсор, вызывая MongoCollection::find() (как показано выше).
Предположим, что в приведенном выше примере $collection была коллекцией 50 Гб. Мы, конечно, не хотим загружать все сразу в память, для этого нужен курсор: позволить клиенту получить доступ к коллекции по частям.
Если у нас большой набор результатов, мы можем выполнить итерацию, загружая несколько мегабайт результатов в память за раз. Например, мы могли бы сделать:
Пример #2 Итерации MongoCursor
<?php
$cursor = $collection->find();
foreach ($cursor as $doc) {
// делаем что-нибудь с каждым документом
}
?>
Обратите внимание, это означает, что курсор не содержит результаты базы данных, он просто управляет ими. Таким образом, если вы печатаете курсор (скажем, с помощью var_dump() или print_r()), вы просто получите объект курсора, а не документы. Чтобы получить сами документы, вы можете использовать один из способов, показанных выше.
MongoCursor имеет две "жизненные стадии": до и после выполнения запроса. Когда курсор создан, он еще не связался с базой данных, поэтому он находится в состоянии перед выполнением запроса. В этом состоянии клиент может дополнительно указать, что он хочет сделать запросом, включая добавление ограничений, пропусков, сортировок и более сложных параметров.
Когда клиент пытается получить результат (вызывая MongoCursor::next(), прямо или косвенно), курсор перемещается в стадию после выполнения запроса. На данный момент запрос был выполнен базой данных и больше не может быть изменен.
Пример #3 Добавление параметров в MongoCursor
<?php
$cursor = $collection->find()->limit(10);
// База данных еще не опрошена, поэтому можно добавить дополнительные параметры поиска
$cursor = $cursor->sort(array("a" => 1));
var_dump($cursor->getNext());
// теперь база данных была опрошена и больше опций не может быть добавлено
// так что это вызовет исключение:
$cursor->skip(4);
?>
$connection
, string $ns
[, array $query
= array()
[, array $fields
= array()
]] )Установленный в запросе флаг "slaveOkay", позволяет выполнять чтение на вторичном сервере (вторичные по умолчанию предназначены только для резервного копирования и не запрашиваются). Может быть переопределен с помощью MongoCursor::slaveOkay().
Эта функциональность устарела. Пожалуйста, используйте вместо этого Предпочтения чтения.
Установите время ожидания в миллисекундах для ответов базы данных. Используйте -1, чтобы ждать вечно. Может быть переопределено с помощью MongoCursor::timeout(). Не приводит к тому, что сервер MongoDB отменяет операцию; только к указанию драйверу прекратить ждать ответа и выдать исключение MongoCursorTimeoutException по истечении заданного времени.
Для получения дополнительной информации о курсорах в MongoDB смотрите » документацию.