International PHP Conference Munich 2025

MongoDB\Driver\Manager::executeBulkWriteCommand

(mongodb >=2.1.0)

MongoDB\Driver\Manager::executeBulkWriteCommandExecute les opérations d'écriture en utilisant la commande bulkWrite

Description

final public MongoDB\Driver\Manager::executeBulkWriteCommand(MongoDB\Driver\BulkWriteCommand $bulk, ?array $options = null): MongoDB\Driver\BulkWriteCommandResult

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

Liste de paramètres

bulk (MongoDB\Driver\BulkWriteCommand)

É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\BulkWriteCommandResult en cas de succès.

Erreurs / Exceptions

Exemples

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)

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top