MongoDB\Driver\Manager::executeBulkWriteCommand
(mongodb >=2.1.0)
Execute write operations using the bulkWrite command
Description
Executes one or more write operations on the primary server using the bulkWrite command introduced in MongoDB 8.0.
A MongoDB\Driver\BulkWriteCommand can be constructed with one or more write operations of varying types (e.g. inserts, updates, and deletes). Each write operation may target a different collection.
The default value for the "writeConcern" option will be inferred from an active transaction (indicated by the "session" option), followed by the connection URI.
Parameters
optionsOption Type Description
Return Values Bulkwritecommandresult
Errors/Exceptions
- Throws
MongoDB\Driver\Exception\InvalidArgumentExceptionifbulkdoes not contain any write operations. - Throws
MongoDB\Driver\Exception\InvalidArgumentExceptionifbulkhas already been executed.MongoDB\Driver\BulkWriteCommandobjects may not be executed multiple times. - Throws
MongoDB\Driver\Exception\RuntimeExceptionon other errors.
Examples
Mixed write operations
Mixed write operations (i.e. inserts, updates, and deletes) will be sent to the server using a single bulkWrite command.
<?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("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
?>The above example will output:
Inserted 3 document(s)
Updated 1 document(s)Ordered write operations causing an error
<?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());
?>The above example will output something similar to:
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)See Also
MongoDB\Driver\BulkWriteCommandMongoDB\Driver\BulkWriteCommandResultMongoDB\Driver\WriteConcernMongoDB\Driver\Server::executeBulkWriteCommand()