« MongoDB\Driver\Manager::executeBulkWrite
MongoDB\Driver\Manager::executeCommand »

MongoDB\Driver\Manager::executeBulkWriteCommand

(mongodb >=2.1.0)

MongoDB\Driver\Manager::executeBulkWriteCommand — Execute write operations using the bulkWrite command

説明

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

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.

パラメータ

bulk (MongoDB\Driver\BulkWriteCommand)

The write(s) to execute.

options

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\BulkWriteCommandResult on success.

エラー / 例外

例

例1 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());

?>

上の例の出力は以下となります。

Inserted 3 document(s)
Updated  1 document(s)

例2 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());

?>

上の例の出力は、 たとえば以下のようになります。

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)
関連キーワード:
MongoDB   Driver   bulk   write   coll   operations   Exception   Manager   Throws   command   BulkWriteCommand   insertOne   document   using   bulkWrite   executeBulkWriteCommand   Execute   server   session   InvalidArgumentException   manager   Inserted   options   BulkWriteCommandResult   operation
関連する関数・ページ:
mongodb-driver-bulkwritecommand.construct   class.mongodb-driver-bulkwritecommand   mongodb-driver-server.executebulkwritecommand   mongodb-driver-bulkwritecommandexception.getpartialresult   mongodb-driver-bulkwritecommand.count   mongodb-driver-bulkwritecommand.insertone