(mongodb >=1.0.0)
MongoDB\Driver\Manager::executeBulkWrite — Execute one or more write operations
$namespace
, MongoDB\Driver\BulkWrite $bulk
, array|MongoDB\Driver\WriteConcern|null $options
= null
): MongoDB\Driver\WriteResultExecutes one or more write operations on the primary server.
A MongoDB\Driver\BulkWrite can be constructed with one or more write operations of varying types (e.g. updates, deletes, and inserts). The driver will attempt to send operations of the same type to the server in as few requests as possible to optimize round trips.
The default value for the "writeConcern"
option will be
inferred from an active transaction (indicated by the
"session"
option), followed by the
connection URI.
namespace
(string)
A fully qualified namespace (e.g. "databaseName.collectionName"
).
bulk
(MongoDB\Driver\BulkWrite)The write(s) to execute.
options
Option | Type | Description |
---|---|---|
session | MongoDB\Driver\Session |
A session to associate with the operation. |
writeConcern | MongoDB\Driver\WriteConcern |
A write concern to apply to the operation. |
Returns MongoDB\Driver\WriteResult on success.
bulk
does not contain any write operations.bulk
has already been executed. MongoDB\Driver\BulkWrite objects may not be executed multiple times."session"
option is used in combination with an unacknowledged write concern.
Version | Description |
---|---|
PECL mongodb 1.4.4 |
MongoDB\Driver\Exception\InvalidArgumentException
will be thrown if the "session" option is used in
combination with an unacknowledged write concern.
|
PECL mongodb 1.4.0 |
The third parameter is now an options array.
For backwards compatibility, this paramater will still accept a
MongoDB\Driver\WriteConcern object.
|
PECL mongodb 1.3.0 |
MongoDB\Driver\Exception\InvalidArgumentException
is now thrown if bulk does not contain any write
operations. Previously, a
MongoDB\Driver\Exception\BulkWriteException was
thrown.
|
Example #1 MongoDB\Driver\Manager::executeBulkWrite() example
<?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);
}
/* If the WriteConcern could not be fulfilled */
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
}
/* If a write could not happen at all */
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
}
?>
The above example will output something similar to:
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)