Start · Sprachen · PHP · Referenz · MongoDB\Driver\CursorId

MongoDB\Driver\CursorId

Klasse

Repräsentiert die eindeutige ID eines MongoDB-Cursors und ermöglicht den Zugriff auf diese.

seit PHP 1.0.0 Kategorie: db

Signatur

final class MongoDB\Driver\CursorId implements Serializable, Stringable

Beschreibung

MongoDB\Driver\CursorId kapselt die numerische Cursor-ID, die MongoDB einem serverseitigen Cursor zuweist. Ein Cursor bleibt auf dem Server offen, solange noch Ergebnisse abgerufen werden müssen (z. B. bei großen Resultsets). Die CursorId-Instanz kann genutzt werden, um die Identität eines Cursors zu protokollieren, zu serialisieren oder für Diagnose­zwecke auszugeben.

Instanzen dieser Klasse werden ausschließlich intern vom Treiber erzeugt und nicht direkt über einen Konstruktor instantiiert. Sie werden typischerweise über MongoDB\Driver\Cursor::getId() abgerufen, nachdem eine Abfrage ausgeführt wurde.

Da die Klasse Serializable implementiert, kann eine CursorId serialisiert und deserialisiert werden – beispielsweise für Logging oder Caching von Cursor-Metadaten. Über die Stringable-Implementierung lässt sich die ID einfach in einen String umwandeln, was für Debug-Ausgaben nützlich ist.

In der Regel ist eine Cursor-ID von 0 ein Hinweis darauf, dass der Cursor bereits vollständig iteriert wurde oder es sich um einen einmaligen (non-tailable) Cursor handelt, der alle Daten auf einmal geliefert hat.

Beispiele

Cursor-ID einer Abfrage ausgeben

<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$query = new MongoDB\Driver\Query([], ['batchSize' => 5]);
$cursor = $manager->executeQuery('testdb.users', $query);

$cursorId = $cursor->getId();

echo 'Cursor-ID: ' . $cursorId . PHP_EOL;
echo 'Ist CursorId: ' . ($cursorId instanceof MongoDB\Driver\CursorId ? 'Ja' : 'Nein') . PHP_EOL;
Cursor-ID: 123456789 Ist CursorId: Ja

CursorId serialisieren und deserialisieren

<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

$query = new MongoDB\Driver\Query([]);
$cursor = $manager->executeQuery('testdb.articles', $query);

$cursorId = $cursor->getId();

// Serialisieren
$serialized = serialize($cursorId);
echo 'Serialisiert: ' . $serialized . PHP_EOL;

// Deserialisieren
$restored = unserialize($serialized);
echo 'Wiederhergestellte Cursor-ID: ' . $restored . PHP_EOL;
echo 'IDs identisch: ' . ((string)$cursorId === (string)$restored ? 'Ja' : 'Nein') . PHP_EOL;
Serialisiert: C:27:"MongoDB\Driver\CursorId":... Wiederhergestellte Cursor-ID: 123456789 IDs identisch: Ja

// Wichtig · Fallstricke

Nicht direkt instantiierbar: MongoDB\Driver\CursorId besitzt keinen öffentlichen Konstruktor. Instanzen können nur über MongoDB\Driver\Cursor::getId() bezogen werden.

Cursor-ID 0: Eine Cursor-ID von 0 bedeutet, dass der Cursor vollständig konsumiert wurde oder alle Ergebnisse in einem einzigen Batch geliefert wurden. Ein Cursor mit ID ungleich 0 ist noch offen auf dem Server und sollte vollständig iteriert oder explizit geschlossen werden, um Server-Ressourcen freizugeben.

Deprecation-Hinweis: Ab PHP 8.1 ist das Serializable-Interface zugunsten von __serialize()/__unserialize() als veraltet markiert. Der MongoDB-Treiber unterstützt jedoch weiterhin die Serialisierung über beide Mechanismen.