(mongodb >=2.1.0)
MongoDB\Driver\Manager::executeBulkWriteCommand — Execute les opérations d'écriture en utilisant la commande bulkWrite
$bulk
, ?array $options
= null
): MongoDB\Driver\BulkWriteCommandResultExécute une pour plusieurs opérations d'écriture sur le serveur principal en utilisant la commande » bulkWrite introduite dans MongoDB 8.0.
Une MongoDB\Driver\BulkWriteCommand peut être construite avec une ou plusieurs opérations d'écriture de types variés (par exemple, des insertions, des mises à jour et des suppressions). Chaque opération d'écriture peut cibler une différente collection.
La valeur par défaut pour l'option "writeConcern"
sera
déduite d'une transaction active (indiquée par l'option
"session"
), suivit par
l'uURI de connexion.
bulk
(MongoDB\Driver\BulkWriteCommand)Écriture(s) à exécuter.
options
Option | Type | Description |
---|---|---|
session | MongoDB\Driver\Session |
Une session à associer à l'opération. |
writeConcern | MongoDB\Driver\WriteConcern |
Une préoccupation d'écriture à appliquer à l'opération. |
Retourne un MongoDB\Driver\BulkWriteCommandResult en cas de succès.
bulk
ne contient pas d'opérations d'écriture valides.bulk
a déjà été exécutée. MongoDB\Driver\BulkWriteCommand les objets ne peuvent pas être exécutés plusieurs fois."session"
est utilisée conjointement avec une préoccupation d'écriture non reconnu.Exemple #1 Opération d'écriture mixées
Les opérations d'écriture mixées (par exemple, insertion, mise à jour et suppression) seront envoyées au serveur en utilisant une seule commande » bulkWrite
<?php
$manager = new MongoDB\Driver\Manager;
$bulk = new MongoDB\Driver\BulkWriteCommand;
// Supprime les documents des deux collections
$bulk->deleteMany('db.coll_one', []);
$bulk->deleteMany('db.coll_two', []);
// Ajoute les documents des deux collections
$bulk->insertOne('db.coll_one', ['_id' => 1]);
$bulk->insertOne('db.coll_two', ['_id' => 2]);
$bulk->insertOne('db.coll_two', ['_id' => 3]);
// Met à jour un document dans "coll_one"
$bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);
$result = $manager->executeBulkWriteCommand($bulk);
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
?>
L'exemple ci-dessus va afficher :
Inserted 3 document(s) Updated 1 document(s)
Exemple #2 Opération d'écriture ordonnée qui provoque 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("Inserted %d document(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) { } } } Inserted 2 document(s)