(mongodb >=2.1.0)
MongoDB\Driver\BulkWriteCommand récupère une ou plusieurs opérations d'écriture qui doivent être envoyées au serveur à l'aide de la commande » bulkWrite introduite dans MongoDB 8.0. Après avoir ajouté un nombre quelconque opération d'écriture, operation de modification et d'opérations de suppression, la commande peut être exécutée via MongoDB\Driver\Manager::executeBulkWriteCommand().
Contrairement à MongoDB\Driver\BulkWrite, où toutes les opérations d'écriture doivent cibler la même collection, chaque opération d'écriture dans MongoDB\Driver\BulkWriteCommand doivent cibler une collection différente.
Les opérations d'écriture peuvent être triées (par défaut) ou non triées. Les opérations triées sont envoyées au serveur, dans l'ordre fourni, pour une exécution sérielle. Si une écriture échoue, toutes les opérations restantes seront annulées. Les opérations non triées sont envoyées au serveur dans un ordre arbitraire où elles peuvent être exécutées en parallèle. Toutes les erreurs qui se produisent sont signalées après que toutes les opérations ont été tentées.
Exemple #1 Opérations d'écriture mixées
Les opérations d'écriture mixées (par exemple, insertions, mises à jour et suppressions) seront envoyé au serveur à l'aide d'une seule commande » bulkWrite.
<?php
$manager = new MongoDB\Driver\Manager;
$bulk = new MongoDB\Driver\BulkWriteCommand;
// Delete documents from both collections
$bulk->deleteMany('db.coll_one', []);
$bulk->deleteMany('db.coll_two', []);
// Insert documents into two collections
$bulk->insertOne('db.coll_one', ['_id' => 1]);
$bulk->insertOne('db.coll_two', ['_id' => 2]);
$bulk->insertOne('db.coll_two', ['_id' => 3]);
// Update a document in "coll_one"
$bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);
$result = $manager->executeBulkWriteCommand($bulk);
printf("%d document(s) ont été inséré(s)\n", $result->getInsertedCount());
printf("%d document(s) ont été mise à jour(s)\n", $result->getModifiedCount());
?>
L'exemple ci-dessus va afficher :
3 document(s) ont été inséré(s) 1 document(s) ont été mise à jour(s
Exemple #2 Opérations d'écriture ordonnées causant une erreur
<?php
$manager = new MongoDB\Driver\Manager;
$bulk = new MongoDB\Driver\BulkWriteCommand;
$bulk->deleteMany('db.coll', []);
$bulk->insertOne('db.coll', ['_id' => 1]);
$bulk->insertOne('db.coll', ['_id' => 2]);
$bulk->insertOne('db.coll', ['_id' => 1]);
$bulk->insertOne('db.coll', ['_id' => 3]);
try {
$result = $manager->executeBulkWriteCommand($bulk);
} catch (MongoDB\Driver\Exception\BulkWriteCommandException $e) {
$result = $e->getPartialResult();
var_dump($e->getWriteErrors());
}
printf("%d document(s) ont été inséré(s)\n", $result->getInsertedCount());
?>
Résultat de l'exemple ci-dessus est similaire à :
array(1) { [3]=> object(MongoDB\Driver\WriteError)#5 (4) { ["message"]=> string(78) "E11000 duplicate key error collection: db.coll index: _id_ dup key: { _id: 1 }" ["code"]=> int(11000) ["index"]=> int(3) ["info"]=> object(stdClass)#6 (0) { } } } 2 document(s) ont été inséré(s)