Signatur
Beschreibung
MongoDB\Driver\WriteConcernError kapselt Fehler, die entstehen, wenn der MongoDB-Server die gewünschten Write-Concern-Anforderungen (z. B. Replikation auf eine bestimmte Anzahl von Nodes) nach einer Schreiboperation nicht erfüllen konnte. Das Objekt ist nicht direkt instanziierbar, sondern wird über MongoDB\Driver\WriteResult::getWriteConcernError() zurückgegeben.
Ein Write-Concern-Fehler unterscheidet sich von einem allgemeinen Schreibfehler (MongoDB\Driver\WriteError): Während Schreibfehler anzeigen, dass das Schreiben selbst fehlgeschlagen ist, bedeutet ein Write-Concern-Fehler, dass das Schreiben zwar stattgefunden hat, aber die Replikations- oder Persistenzanforderungen nicht innerhalb des definierten Zeitfensters erfüllt wurden.
Die Klasse implementiert das Interface MongoDB\Driver\Exception\Exception nicht direkt — sie ist kein geworfenes Exception-Objekt, sondern ein reines Datenobjekt, das Fehlerdetails wie Code, Meldung und zugehörige Dokumente enthält. Zur Fehlerbehandlung kombiniert man sie typischerweise mit einem Try-Catch-Block für MongoDB\Driver\Exception\BulkWriteException.
getCode()— gibt den MongoDB-Fehlercode zurückgetMessage()— gibt die Fehlermeldung zurückgetInfo()— gibt ein optionales Dokument mit weiteren Fehlerdetails zurück
Beispiele
Write-Concern-Fehler nach einer Bulk-Schreiboperation auslesen
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['name' => 'Alice', 'age' => 30]);
$bulk->insert(['name' => 'Bob', 'age' => 25]);
// Write-Concern: Bestätigung von mindestens 2 Replica-Set-Mitgliedern,
// Timeout nach 1000 ms — kann zu einem WriteConcernError führen,
// wenn nicht genügend Nodes verfügbar sind.
$writeConcern = new MongoDB\Driver\WriteConcern(2, 1000);
try {
$result = $manager->executeBulkWrite('testdb.users', $bulk, ['writeConcern' => $writeConcern]);
$wcError = $result->getWriteConcernError();
if ($wcError !== null) {
echo 'Write-Concern-Fehler aufgetreten:' . PHP_EOL;
echo 'Code: ' . $wcError->getCode() . PHP_EOL;
echo 'Meldung: ' . $wcError->getMessage() . PHP_EOL;
$info = $wcError->getInfo();
if ($info !== null) {
echo 'Info: ' . json_encode((array) $info) . PHP_EOL;
}
} else {
echo 'Alle Dokumente erfolgreich geschrieben und repliziert.' . PHP_EOL;
}
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
$wcError = $e->getWriteResult()->getWriteConcernError();
if ($wcError !== null) {
echo 'BulkWriteException — Write-Concern-Fehler:' . PHP_EOL;
echo 'Code: ' . $wcError->getCode() . PHP_EOL;
echo 'Meldung: ' . $wcError->getMessage() . PHP_EOL;
} else {
echo 'Sonstiger BulkWrite-Fehler: ' . $e->getMessage() . PHP_EOL;
}
} catch (MongoDB\Driver\Exception\Exception $e) {
echo 'MongoDB-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Write-Concern-Fehler-Details strukturiert ausgeben
<?php
// Hilfsfunktion, um einen WriteConcernError übersichtlich darzustellen
function printWriteConcernError(MongoDB\Driver\WriteConcernError $error): void
{
echo sprintf(
"WriteConcernError [%d]: %s\n",
$error->getCode(),
$error->getMessage()
);
$info = $error->getInfo();
if ($info !== null) {
echo 'Details: ' . json_encode($info, JSON_PRETTY_PRINT) . PHP_EOL;
}
}
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['status' => 'critical']);
$result = $manager->executeBulkWrite(
'mydb.logs',
$bulk,
['writeConcern' => new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 500)]
);
$wcError = $result->getWriteConcernError();
if ($wcError instanceof MongoDB\Driver\WriteConcernError) {
printWriteConcernError($wcError);
} else {
echo 'Kein Write-Concern-Fehler.' . PHP_EOL;
}
// Wichtig · Fallstricke
Kein Exception-Objekt: WriteConcernError kann nicht mit throw geworfen werden. Es ist ein reines Datenobjekt, das über WriteResult::getWriteConcernError() oder BulkWriteException::getWriteResult()->getWriteConcernError() abgerufen wird.
Unterschied zu WriteError: MongoDB\Driver\WriteError signalisiert, dass ein einzelnes Dokument nicht geschrieben werden konnte (z. B. Duplikat-Key). WriteConcernError bedeutet hingegen, dass das Dokument auf dem primären Node geschrieben wurde, aber die Replikationsgarantien nicht erfüllt werden konnten — die Daten sind also möglicherweise vorhanden, aber nicht garantiert dauerhaft.
Klasse ist final: MongoDB\Driver\WriteConcernError ist nicht erweiterbar und kann nicht manuell instanziiert werden — Objekte dieser Klasse werden ausschließlich intern vom Treiber erstellt.