Signatur
Beschreibung
MongoDB\Driver\BulkWriteCommandResult kapselt alle Rückgabeinformationen, die MongoDB nach der Ausführung eines Bulk-Write-Befehls liefert. Das Objekt enthält Zähler für eingefügte, aktualisierte, ersetzt und gelöschte Dokumente sowie Informationen zu Upserts (kombinierte Insert-Update-Operationen).
Instanzen dieser Klasse werden nicht manuell erzeugt, sondern ausschließlich als Rückgabewert von MongoDB\Driver\Manager::executeBulkWriteCommand() zurückgegeben. Die Klasse implementiert keine öffentlichen Konstruktoren und ist damit bewusst als reines Ergebnis-Value-Object konzipiert.
Im Gegensatz zur älteren MongoDB\Driver\WriteResult-Klasse (die von executeBulkWrite() zurückgegeben wird) bezieht sich BulkWriteCommandResult auf den neueren bulkWrite-Datenbankbefehl, der mit MongoDB Server 8.0 eingeführt wurde und effizientere Bulk-Operationen über mehrere Collections ermöglicht.
Mit den bereitgestellten Getter-Methoden lassen sich detaillierte Auswertungen zu einzelnen Schreiboperationen vornehmen, z. B. um festzustellen, wie viele Dokumente tatsächlich geändert wurden oder welche Dokumente durch Upserts neu angelegt wurden.
Beispiele
Bulk-Write-Befehl ausführen und Ergebnis auswerten
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWriteCommand();
$bulk->insertOne('testdb.users', ['name' => 'Alice', 'age' => 30]);
$bulk->insertOne('testdb.users', ['name' => 'Bob', 'age' => 25]);
$bulk->updateOne(
'testdb.users',
['name' => 'Alice'],
['$set' => ['age' => 31]]
);
$bulk->deleteOne('testdb.users', ['name' => 'Bob']);
/** @var MongoDB\Driver\BulkWriteCommandResult $result */
$result = $manager->executeBulkWriteCommand($bulk);
echo 'Eingefügt: ' . $result->getInsertedCount() . PHP_EOL;
echo 'Aktualisiert: ' . $result->getModifiedCount() . PHP_EOL;
echo 'Gelöscht: ' . $result->getDeletedCount() . PHP_EOL;
Upserts aus dem Ergebnis auslesen
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWriteCommand();
// Upsert: Dokument wird neu angelegt, falls nicht vorhanden
$bulk->updateOne(
'testdb.products',
['sku' => 'ABC-123'],
['$set' => ['price' => 9.99, 'stock' => 100]],
['upsert' => true]
);
/** @var MongoDB\Driver\BulkWriteCommandResult $result */
$result = $manager->executeBulkWriteCommand($bulk);
echo 'Upserted Count: ' . $result->getUpsertedCount() . PHP_EOL;
foreach ($result->getUpsertedIds() as $index => $id) {
echo 'Operation #' . $index . ' erzeugte neue ID: ' . $id . PHP_EOL;
}
// Wichtig · Fallstricke
Serveranforderung: Der zugrunde liegende bulkWrite-Datenbankbefehl erfordert MongoDB Server 8.0 oder neuer. Bei älteren Serverversionen wird eine MongoDB\Driver\Exception\RuntimeException ausgelöst.
Kein manueller Konstruktor: BulkWriteCommandResult-Objekte können nicht mit new erzeugt werden. Versuche, den Konstruktor direkt aufzurufen, führen zu einem Fehler.
Unterschied zu WriteResult: Verwechsle diese Klasse nicht mit MongoDB\Driver\WriteResult, die von executeBulkWrite() zurückgegeben wird und pro Collection arbeitet. BulkWriteCommandResult ist für den neueren, collections-übergreifenden Bulk-Befehl konzipiert und bietet ggf. andere Methoden und Eigenschaften.