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

MongoDB\Driver\WriteError

Klasse

Repräsentiert einen einzelnen Schreibfehler, der bei einer Bulk-Write-Operation aufgetreten ist.

seit PHP 1.0.0 Kategorie: error

Signatur

class MongoDB\Driver\WriteError

Beschreibung

MongoDB\Driver\WriteError kapselt die Informationen zu einem einzelnen Fehler, der während einer Bulk-Write-Operation (MongoDB\Driver\BulkWrite) aufgetreten ist. Objekte dieser Klasse werden nicht direkt instanziiert, sondern über die Methode MongoDB\Driver\WriteException::getWriteResult() bzw. MongoDB\Driver\WriteResult::getWriteErrors() abgerufen.

Jedes WriteError-Objekt liefert den Fehlercode (getCode()), eine optionale Informationsstruktur (getInfo()), die menschenlesbare Fehlermeldung (getMessage()) sowie den Index des fehlerhaften Dokuments innerhalb der Bulk-Operation (getIndex()). So lässt sich genau nachvollziehen, welches Dokument den Fehler verursacht hat.

Typische Anwendungsfälle sind das Analysieren von Duplikat-Schlüssel-Fehlern (Fehlercode 11000) oder Verstößen gegen Validierungsregeln, wenn ordered: false bei der Bulk-Write-Operation verwendet wird, um alle Fehler gesammelt zu erhalten statt beim ersten Fehler abzubrechen.

Da die Klasse final ist und keinen öffentlichen Konstruktor besitzt, kann sie nicht erweitert oder manuell instanziiert werden. Sie dient ausschließlich als Leseschnittstelle für Fehlerinformationen aus MongoDB-Write-Operationen.

Beispiele

Schreibfehler bei einer Bulk-Write-Operation abfangen und auswerten

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

$bulk = new MongoDB\Driver\BulkWrite(['ordered' => false]);
$bulk->insert(['_id' => 1, 'name' => 'Alice']);
$bulk->insert(['_id' => 1, 'name' => 'Duplikat']); // Doppelter _id-Wert
$bulk->insert(['_id' => 2, 'name' => 'Bob']);

try {
    $result = $manager->executeBulkWrite('testdb.users', $bulk);
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
    $writeResult = $e->getWriteResult();

    foreach ($writeResult->getWriteErrors() as $writeError) {
        echo 'Dokument-Index : ' . $writeError->getIndex() . PHP_EOL;
        echo 'Fehlercode     : ' . $writeError->getCode() . PHP_EOL;
        echo 'Fehlermeldung  : ' . $writeError->getMessage() . PHP_EOL;
        if ($writeError->getInfo() !== null) {
            echo 'Zusatzinfos    : ' . print_r($writeError->getInfo(), true) . PHP_EOL;
        }
        echo '---' . PHP_EOL;
    }
}
Dokument-Index : 1 Fehlercode : 11000 Fehlermeldung : E11000 duplicate key error collection: testdb.users index: _id_ dup key: { _id: 1 } ---

Duplikat-Schlüssel-Fehler gezielt erkennen

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

$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['_id' => 42, 'titel' => 'Erster Eintrag']);
$bulk->insert(['_id' => 42, 'titel' => 'Zweiter Eintrag']); // Konflikt

try {
    $manager->executeBulkWrite('testdb.artikel', $bulk);
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
    foreach ($e->getWriteResult()->getWriteErrors() as $error) {
        if ($error->getCode() === 11000) {
            echo 'Duplikat-Schlüssel-Fehler bei Dokument Nr. ' . $error->getIndex() . PHP_EOL;
            echo 'Details: ' . $error->getMessage() . PHP_EOL;
        } else {
            echo 'Unbekannter Fehler (' . $error->getCode() . '): ' . $error->getMessage() . PHP_EOL;
        }
    }
}
Duplikat-Schlüssel-Fehler bei Dokument Nr. 1 Details: E11000 duplicate key error collection: testdb.artikel index: _id_ dup key: { _id: 42 }

// Wichtig · Fallstricke

Nicht instanziierbar: MongoDB\Driver\WriteError ist eine final-Klasse ohne öffentlichen Konstruktor. Objekte können ausschließlich über MongoDB\Driver\WriteResult::getWriteErrors() bezogen werden.

ordered vs. unordered: Bei ordered: true (Standard) bricht MongoDB die Bulk-Write beim ersten Fehler ab — es gibt dann nur einen einzigen WriteError. Bei ordered: false werden alle Operationen versucht und alle Fehler gesammelt, was eine vollständige Auswertung aller WriteError-Objekte ermöglicht.

Verfügbare Methoden: getCode() (int), getIndex() (int), getInfo() (object|null), getMessage() (string).