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

MongoDB\Driver\BulkWriteCommandResult

Klasse

Repräsentiert das Ergebnis eines Bulk-Write-Befehls, der über <code>MongoDB\Driver\Manager::executeBulkWriteCommand()</code> ausgeführt wurde.

seit PHP 1.21.0 Kategorie: db

Signatur

class MongoDB\Driver\BulkWriteCommandResult

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;
Eingefügt: 2 Aktualisiert: 1 Gelöscht: 1

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;
}
Upserted Count: 1 Operation #0 erzeugte neue ID: 64f1a2b3c4d5e6f7a8b9c0d1

// 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.