(mongodb >=1.0.0)
MongoDB\Driver\Manager::executeBulkWrite — Exécute une ou plusieurs opérations d'écriture
$namespace
, MongoDB\Driver\BulkWrite $bulk
, array|MongoDB\Driver\WriteConcern|null $options
= null
): MongoDB\Driver\WriteResultExécute une ou plusieurs opérations d'écriture sur le serveur primaire.
Un MongoDB\Driver\BulkWrite peut être construit avec une ou plusieurs opérations d'écriture de types variés (par exemple, mises à jour, suppressions et insertions). Le pilote tentera d'envoyer les opérations du même type au serveur en aussi peu de requêtes que possible pour optimiser les allers-retours.
La valeur par défaut de l'option "writeConcern"
sera
déduite à partir d'une transaction active (indiquée par l'option
"session"
), suivie de l'
URI de connexion.
namespace
(string)
Un espace de noms totalement qualifié (e.g. "databaseName.collectionName"
)
bulk
(MongoDB\Driver\BulkWrite)É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\WriteResult en cas de succès.
bulk
ne contient aucune opérations d'écriture.bulk
a déjà été éxécuté. Les objets MongoDB\Driver\BulkWrite ne peuvent pas être exécutés plusieurs fois."session"
est utilisée conjointement avec une préoccupation d'écriture non reconnu.
Version | Description |
---|---|
PECL mongodb 1.4.4 |
Une MongoDB\Driver\Exception\InvalidArgumentException
sera lancée si l'option "session" est utilisée en
combinaison avec un "writeConcern" non-acknowledged.
|
PECL mongodb 1.4.0 |
Le troisième paramètre est maintenant un tableau d'options .
Pour des raisons de compatibilité ascendante, ce paramètre acceptera
toujours un objet MongoDB\Driver\WriteConcern.
|
PECL mongodb 1.3.0 |
Une MongoDB\Driver\Exception\InvalidArgumentException
est maintenant lancée si bulk ne contient aucune
opération d'écriture. Précédemment, une
MongoDB\Driver\Exception\BulkWriteException était
lancée.
|
Exemple #1 Exemple de MongoDB\Driver\Manager::executeBulkWrite()
<?php
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);
$bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
$bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->insert(['_id' => 4, 'x' => 2]);
$bulk->delete(['x' => 1], ['limit' => 1]);
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
$result = $manager->executeBulkWrite('db.collection', $bulk, $writeConcern);
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Matched %d document(s)\n", $result->getMatchedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
printf("Upserted %d document(s)\n", $result->getUpsertedCount());
printf("Deleted %d document(s)\n", $result->getDeletedCount());
foreach ($result->getUpsertedIds() as $index => $id) {
printf('upsertedId[%d]: ', $index);
var_dump($id);
}
/* Si le WriteConcern n'a pas pu être satisfait */
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
}
/* Si une écriture n'a pas pu se faire du tout */
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
}
?>
Résultat de l'exemple ci-dessus est similaire à :
Inserted 3 document(s) Matched 1 document(s) Updated 1 document(s) Upserted 2 document(s) Deleted 1 document(s) upsertedId[3]: object(MongoDB\BSON\ObjectId)#5 (1) { ["oid"]=> string(24) "54d3adc3ce7a792f4d703756" } upsertedId[4]: int(3)