PHP.mk документација

MongoDB\Driver\Cursor

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.mongodb-driver-cursor.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.mongodb-driver-cursor.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
MongoDB\Driver\Cursor

Референца за `class.mongodb-driver-cursor.php` со подобрена типографија и навигација.

class.mongodb-driver-cursor.php

The MongoDB\Driver\Cursor class

класата MongoDB\Driver\BulkWrite

Синопсис на класата

final class MongoDB\Driver\Cursor implements MongoDB\Driver\CursorInterface {
/* Методи */
final private __construct()
final public getId(): MongoDB\BSON\Int64
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
}

Дневник на промени

Верзија = NULL
MongoDB\Driver\Manager::executeQuery() PECL mongodb 1.12.0 Итератор.
својство рачно. PECL mongodb 1.12.0 MongoDB\Driver\CursorInterface, кој се протега Траверзабилно.

Примери

PECL mongodb 1.9.0

Кога корисникот ќе кликне некаде на сликата, придружната форма ќе биде предадена на серверот со две дополнителни променливи: MongoDB\Driver\Cursor објект. Овој објект може да се користи за итерација низ сетот на резултати од командата или прашањето. Траверзабилно го имплементира foreach.

<?php

$manager
= new MongoDB\Driver\Manager();

/* Insert some documents so that our query returns information */
$bulkWrite = new MongoDB\Driver\BulkWrite;
$bulkWrite->insert(['name' => 'Ceres', 'size' => 946, 'distance' => 2.766]);
$bulkWrite->insert(['name' => 'Vesta', 'size' => 525, 'distance' => 2.362]);
$manager->executeBulkWrite("test.asteroids", $bulkWrite);

/* Query for all the items in the collection */
$query = new MongoDB\Driver\Query( [] );

/* Query the "asteroids" collection of the "test" database */
$cursor = $manager->executeQuery("test.asteroids", $query);

/* $cursor now contains an object that wraps around the result set. Use
* foreach() to iterate over all the result */
foreach($cursor as $document) {
print_r($document);
}

?>

Горниот пример ќе прикаже нешто слично на:

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
}

интерфејсот, можете едноставно да итерирате низ сетот на резултати со

» Capped Collections foreachДодека нормалните курсори можат да се итерираат еднаш со foreach , тој пристап нема да работи со tailable курсори. Кога foreach се користи со tailable курсор, циклусот ќе престане по достигнувањето на крајот на почетниот сет на резултати. Обидот за продолжување на итерацијата на курсорот со втор

би фрлил исклучок, бидејќи PHP се обидува да го премота курсорот. Слично на објектите за резултати во други драјвери за бази на податоци, курсорите во MongoDB поддржуваат само напред итерација, што значи дека не можат да се премотуваат. IteratorIteratorЗа да читате континуирано од tailable курсор, објектот Cursor мора да биде завиткан со

. Ова му овозможува на апликацијата директно да ја контролира итерацијата на курсорот, да избегне случајно премотување на курсорот и да одлучи кога да чека нови резултати или целосно да ја прекине итерацијата. » креирај команда и продолжи да вметнуваш нов документ во таа колекција секоја секунда.

<?php

$manager
= new MongoDB\Driver\Manager;

$manager->executeCommand('test', new MongoDB\Driver\Command([
'create' => 'asteroids',
'capped' => true,
'size' => 1048576,
]));

while (
true) {
$bulkWrite = new MongoDB\Driver\BulkWrite;
$bulkWrite->insert(['createdAt' => new MongoDB\BSON\UTCDateTime]);
$manager->executeBulkWrite('test.asteroids', $bulkWrite);

sleep(1);
}

?>

Додека скриптата за производство сè уште работи, може да се изврши втора скрипта за потрошувач за да ги прочита вметнатите документи користејќи таилејбл курсор, означен со tailable and awaitData опции до MongoDB\Driver\Query::__construct().

<?php

$manager
= new MongoDB\Driver\Manager;

$query = new MongoDB\Driver\Query([], [
'tailable' => true,
'awaitData' => true,
]);

$cursor = $manager->executeQuery('test.asteroids', $query);

$iterator = new IteratorIterator($cursor);

$iterator->rewind();

while (
true) {
if (
$iterator->valid()) {
$document = $iterator->current();
printf("Consumed document created at: %s\n", $document->createdAt);
}

$iterator->next();
}

?>

Скриптата за потрошувач ќе започне со брзо печатење на сите достапни документи во затворената колекција (како да foreach било користено); сепак, нема да заврши кога ќе го достигне крајот на почетниот сет на резултати. Бидејќи курсорот е таилејбл, повикувањето IteratorIterator::next() ќе блокира и ќе чека дополнителни резултати. IteratorIterator::valid() исто така се користи за проверка дали навистина има податоци достапни за читање во секој чекор.

Забелешка: Овој пример го користи awaitData опцијата за прашање за да му се наложи на серверот да блокира за краток период (на пр. една секунда) на крајот од сетот на резултати пред да врати одговор до драјверот. Ова се користи за да се спречи драјверот агресивно да го анкетира серверот кога нема достапни резултати. maxAwaitTimeMS опцијата може да се користи во комбинација со tailable and awaitData за да се специфицира времето за кое серверот треба да блокира кога ќе го достигне крајот на сетот на резултати.

Errors/Exceptions

При итерирање низ објектот на курсорот, BSON податоците се претвораат во PHP променливи. Оваа итерација може да предизвика следниве исклучоци:

Содржина

Белешки од корисници 5 белешки

max-p на max-p точка me
пред 10 години
As one might notice, this class does not implement a hasNext() or next() method as opposed to the now deprecated Mongo driver.

If, for any reason, you need to pull data from the cursor procedurally or otherwise need to override the behavior of foreach while iterating on the cursor, the SPL \IteratorIterator class can be used. When doing so, it is important to rewind the iterator before using it, otherwise you won't get any data back.

<?php
$cursor = $collection->find();
$it = new \IteratorIterator($cursor);
$it->rewind(); // Very important

while($doc = $it->current()) {
    var_dump($doc);
    $it->next();
}
?>

I used this trick to build a backward compatibility wrapper emulating the old Mongo driver in order to upgrade an older codebase.
tdrpic
пред 9 години
If you find that it would be easier to use arrays (instead of objects) for the returned documents, add the following after executing your query:

$cursor->setTypeMap(['root' => 'array', 'document' => 'array', 'array' => 'array']);
— Проверува дали тековната позиција во курсорот е валидна
пред 10 години
I noticed that  ->sort is missing from the cursor.  Seems like the old driver has more functionality.

[red.: The way how cursors are created is different between the drivers. In the old driver, the cursor would not be created until after the first rewind() call on the iterator.

In the new driver the cursor already exists. Because sort (and limit and skip) parameters need to be send to the server, they can not be called after the cursor already has been created.

You can use sort (and limit and skip) with the new driver as well, by specifying them as options to the Query as shown in this example: http://php.net/manual/en/mongodb-driver-query.construct.php#refsect1-mongodb-driver-query.construct-examples]
mikemartin2016 на gmail точка com
пред 8 години
There used to be a count() method in the old mongo extension (http://docs.php.net/manual/en/mongocursor.count.php), however, this feature seems to be deleted in mongodb.

I've seen some people use executeCommand() to do that, but I found it much more earier to just use the toArray() method and count the returned array.

For example:
$manager = new MongoDB\Driver\Manager();
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('db.collection', $query)->toArray();
var_dump(count($cursor));
peichi40233 на gmail точка com
пред 4 години
Since php-mongodb version 1.9.0 Cursor implements Iterator, but if you need to support older versions too, you can conditionally wrap the cursor with IteratorIterator:

<?php
$iterator = $collection->find();

if (!($iterator implements Iterator)) {
  $iterator = new \IteratorIterator($iterator);
}
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.