International PHP Conference Munich 2025

La classe MongoDB\Driver\BulkWriteCommand

(mongodb >=2.1.0)

Introduction

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.

Synopsis de la classe

final class MongoDB\Driver\BulkWriteCommand implements Countable {
/* Méthodes */
public __construct(?array $options = null)
public count(): int
public deleteMany(string $namespace, array|object $filter, ?array $options = null): void
public deleteOne(string $namespace, array|object $filter, ?array $options = null): void
public insertOne(string $namespace, array|object $document): mixed
public replaceOne(
    string $namespace,
    array|object $filter,
    array|object $replacement,
    ?array $options = null
): void
public updateMany(
    string $namespace,
    array|object $filter,
    array|object $update,
    ?array $options = null
): void
public updateOne(
    string $namespace,
    array|object $filter,
    array|object $update,
    ?array $options = null
): void
}

Exemples

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)

Sommaire

add a note

User Contributed Notes

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