« MongoDB\Driver\BulkWrite::update
MongoDB\Driver\BulkWriteCommand::__construct »

The MongoDB\Driver\BulkWriteCommand class

(mongodb >=2.1.0)

はじめに

MongoDB\Driver\BulkWriteCommand collects one or more write operations that should be sent to the server using the » bulkWrite command introduced in MongoDB 8.0. After adding any number of insert, update, and delete operations, the command may be executed via MongoDB\Driver\Manager::executeBulkWriteCommand().

Unlike MongoDB\Driver\BulkWrite, where all write operations must target the same collection, each write operation within MongoDB\Driver\BulkWriteCommand may target a different collection.

Write operations may either be ordered (default) or unordered. Ordered write operations are sent to the server, in the order provided, for serial execution. If a write fails, any remaining operations will be aborted. Unordered operations are sent to the server in an arbitrary order where they may be executed in parallel. Any errors that occur are reported after all operations have been attempted.

クラス概要

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

例

例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   BulkWriteCommand   bulk   coll   operations   insertOne   write   document   operation   options   deleteMany   namespace   filter   update   sent   server   Manager   executeBulkWriteCommand   updateOne   manager   Inserted   construct   command   collection
関連する関数・ページ:
mongodb-driver-bulkwritecommand.construct   mongodb-driver-manager.executebulkwritecommand   mongodb-driver-bulkwritecommand.insertone   mongodb-driver-bulkwritecommand.count   mongodb-driver-bulkwritecommandexception.getpartialresult   mongodb-driver-bulkwritecommandexception.getwriteerrors