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