(mongodb >=0.2.0)
MongoDB\Driver\Manager::executeBulkWrite — Execute one or more write operations
$namespace
, MongoDB\Driver\BulkWrite $bulk
[, MongoDB\Driver\WriteConcern $writeConcern
] )Executes one or more write operations.
A MongoDB\Driver\BulkWrite can be constructed with multiple write operations of varying types (e.g. updates, deletes, and inserts). The driver will attempt to send similarly type operations to the server at the same time to optimize round trips.
namespace完全修飾形式の名前空間 (databaseName.collectionName)。
bulkThe MongoDB\Driver\BulkWrite to execute.
writeConcernオプションで、MongoDB\Driver\WriteConcern を指定します。省略した場合のデフォルトは、MongoDB Connection URI で設定したものとなります。
成功した場合に MongoDB\Driver\WriteResult を返します。失敗した場合に例外 (MongoDB\Driver\Exception のインスタンス) をスローします。
例1 MongoDB\Driver\Manager::executeBulkWrite() example
<?php
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array("_id" => 1, "x" => 1));
$bulk->insert(array("_id" => 2, "x" => 2));
$bulk->update(array( "x" => 2), array('$set' => array("x" => 1)), array("multi" => false, "upsert" => false));
$bulk->update(array( "x" => 3), array('$set' => array("x" => 3)), array("multi" => false, "upsert" => true));
$bulk->update(array("_id" => 3), array('$set' => array("x" => 3)), array("multi" => false, "upsert" => true));
$bulk->insert(array("_id" => 4, "x" => 2));
$bulk->delete(array("x" => 1), array("limit" => 1));
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
$result = $manager->executeBulkWrite("databaseName.collectionName", $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());
}
?>
上の例の出力は、 たとえば以下のようになります。
Inserted 3 document(s)
Matched 1 document(s)
Updated 1 document(s)
Upserted 2 document(s)
Deleted 1 document(s)
upsertedId[3]: object(BSON\ObjectID)#5 (1) {
["oid"]=>
string(24) "54d3adc3ce7a792f4d703756"
}
upsertedId[4]: int(3)