MongoDB\Driver\Manager::executeBulkWrite

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeBulkWriteExécute une ou plusieurs opérations d'écriture

Description

final public MongoDB\Driver\Manager::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $bulk, array|MongoDB\Driver\WriteConcern|null $options = null): MongoDB\Driver\WriteResult

Exé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.

Liste de paramètres

namespace (string)

Un espace de noms totalement qualifié (e.g. "databaseName.collectionName")

bulk (MongoDB\Driver\BulkWrite)

Écriture(s) à exécuter.

options

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.

Valeurs de retour

Retourne un MongoDB\Driver\WriteResult en cas de succès.

Erreurs / Exceptions

Historique

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.

Exemples

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)

Voir aussi

add a note

User Contributed Notes 1 note

up
2
RJ
5 years ago
If you're trying to figure out how to insert just one object and NOT an array resulting in a bunch of unwanted [0]s in your schema, I'm sorry I cannot help you. I've scoured the SERPs and since MongoDB\Driver\BulkWrite only takes an array it appears there is literally no way to "insertOne" in PHP7, nor a way to pass JUST an object and NOT an array, which may mean you must use a different language or revert to shell commands :-\.

There are several articles where people, apparently mistakenly, refer to "MongoDB\Driver\Client" but neither that nor "MongoDB\Driver\Collections" appear to exist at all. I'm devastated, but if this forces me to downgrade to PHP5 on a brand new project I'll just need to move to a more modern language. :-(

After several hours of this torture I'm now going to spend another hour trying to figure out if I can compose an update query that will collapse the unnecessary array that is being stuck where an object (document) should be. Ug. I realize people using MongoDB have mostly fled PHP, but abandoning the few & loyal among us is really very sad as has been attested to by the unresolved stackoverflow laments that have been going on for years.
To Top