Клас MongoDB\Driver\Cursor

(mongodb >=1.0.0)

Вступ

КлассMongoDB\Driver\Cursor містить результати команди MongoDB command або запиту та може бути повернутий MongoDB\Driver\Manager::executeCommand() або MongoDB\Driver\Manager::executeQuery()соответственно.

Огляд класів



    
    
     final
     
      class MongoDB\Driver\Cursor
     

     implements 
       MongoDB\Driver\CursorInterface,  Iterator {
    

    /* Методы */
    
   final private __construct()
public current(): array|object|null
final public getId(): MongoDB\Driver\CursorId
final public getServer(): MongoDB\Driver\Server
final public isDead(): bool
public key(): int
public next(): void
public rewind(): void
final public setTypeMap(array $typemap): void
final public toArray(): array
public valid(): bool

   }

список змін

ВерсияОпис
PECL mongodb 1.9.0Реалізує Iterator
PECL mongodb 1.6.0Реалізує MongoDB\Driver\CursorInterface, який успадковує Traversable

Приклади

Приклад #1 Reading a result set

Як MongoDB\Driver\Manager::executeCommand(), такMongoDB\Driver\Manager::executeQuery(), повертають свої результати у вигляді об'єкту MongoDB\Driver\Cursor

Оскільки MongoDB\Driver\Cursor реалізує інтерфейс Traversable, ви можете ітерувати за набором результату за допомогою foreach

Loading...

Висновок наведеного прикладу буде схожим на:

stdClass Object
(
    [_id] => MongoDB\BSON\ObjectId Object
        (
            [oid] => 5a4cff2f122d3321565d8cc2
        )

    [name] => Ceres
    [size] => 946
    [distance] => 2.766
)
stdClass Object
(
    [_id] => MongoDB\BSON\ObjectId Object
        (
            [oid] => 5a4cff2f122d3321565d8cc3
        )

    [name] => Vesta
    [size] => 525
    [distance] => 2.362
}

Приклад #2 Читання результатів для хвостового курсору

» Хвостові курсори - - це особливий тип курсору MongoDB, який дозволяє клієнту читати деякі результати, а потім чекати, доки не з'являться додаткові документи. Ці курсори в основному використовуються з » Capped Collections і » Change Streams

Хоча звичайні курсори можна ітерувати один раз за допомогою foreach, цей підхід не працюватиме з хвостовими курсорами. Коли foreach використовується з хвостовим курсором, цикл зупиняється після досягнення кінця початкового набору результатів. Спроба продовжити ітерацію курсору з другим foreach викинути виняток, оскільки PHP намагається перемотати курсор. Подібно до об'єктів результатів в інших драйверах баз даних, курсори в MongoDB підтримують лише ітерацію вперед, що означає, що вони не можуть бути перемотані.

Для безперервного зчитування з хвостового курсору об'єкт курсора повинен бути загорнутий за допомогою IteratorIterator. Це дозволяє застосуванню безпосередньо керувати ітерацією курсору, уникати ненавмисного перемотування курсору і вирішувати, коли чекати на нові результати або повністю припинити ітерацію.

Щоб продемонструвати хвостовий курсор у дії, будуть використовуватися два скрипти: "виробник" (producer) та "споживач" (consumer). Скрипт продюсера створить нову capped-колекцію, використовуючи команду » create і почне вставляти новий документ у цю колекцію кожну секунду.

Loading...

Коли скрипт продюсера (producer) все ще запущений, може бути виконаний другий скрипт для читання вставлених документів за допомогою хвостового (tailable) курсора, позначеного параметрами tailableиawaitDataдляMongoDB\Driver\Query::__construct()

Loading...

Скрипт користувача почне з швидкого друку всіх доступних документів у заблокованій колекції (як би використовувався foreach); однак, при досягненні кінця початкового набору результатів він не завершиться. Оскільки курсор є хвостовим, виклик IteratorIterator::valid() буде блокувати та чекати на додаткові результати . IteratorIterator::valid() також використовується для перевірки наявності на кожному етапі даних, доступних для читання.

Зауваження: У цьому прикладі використовується опція запиту awaitData, щоб проінструктувати сервер блокувати протягом короткого періоду (наприклад, одну секунду) наприкінці набору результатів перед поверненням відповіді драйверу. Це використовується для запобігання агресивному опитуванню (polling) серверу за відсутності результатів. Параметр maxAwaitTimeMS може використовуватися в поєднанні з tailableиawaitData, щоб вказати час, який сервер повинен блокувати, коли він досягне кінця набору результатів.

Помилки

При ітерації об'єктом курсору дані BSON перетворюються на змінні PHP. Ця ітерація може викликати такі винятки:

Зміст