Signatur
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 Diagnosezwecke 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;
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;
// 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.