# A classe MongoDB\Driver\BulkWriteCommand

(mongodb >=2.1.0)

## Introdução

MongoDB\Driver\BulkWriteCommand coleta uma ou mais operações de gravação que devem ser enviadas ao servidor usando o comando » bulkWrite introduzido no MongoDB 8.0. Após adicionar qualquer número de operações de inserção, atualização e exclusão, o comando pode ser executado via MongoDB\Driver\Manager::executeBulkWriteCommand().

Ao contrário de MongoDB\Driver\BulkWrite, onde todas as operações de gravação devem ter como alvo a mesma coleção, cada operação de gravação dentro de MongoDB\Driver\BulkWriteCommand pode ter como alvo uma coleção diferente.

As operações de gravação podem ser ordenadas (padrão) ou não ordenadas. As operações de gravação ordenadas são enviadas ao servidor, na ordem fornecida, para execução em série. Se uma gravação falhar, as operações restantes serão abortadas. As operações não ordenadas são enviadas ao servidor em uma ordem arbitrária onde podem ser executadas em paralelo. Quaisquer erros que ocorram são reportados após todas as operações terem sido tentadas.

## Resumo da classe

final class MongoDB\Driver\BulkWriteCommand implements Countable {
/* Métodos */
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
}

## Exemplos

Exemplo #1 Operações de gravação mistas

Operações de gravação mistas (ou seja, inserções, atualizações e exclusões) serão enviadas para o servidor usando um único comando » bulkWrite.

    <?php

    $manager = new MongoDB\Driver\Manager;

    $bulk = new MongoDB\Driver\BulkWriteCommand;

    // Exclui documentos de ambas as coleções
    $bulk->deleteMany('db.coll_one', []);
    $bulk->deleteMany('db.coll_two', []);

    // Insere documentos em duas coleções
    $bulk->insertOne('db.coll_one', ['_id' => 1]);
    $bulk->insertOne('db.coll_two', ['_id' => 2]);
    $bulk->insertOne('db.coll_two', ['_id' => 3]);

    // Atualiza um documento em "coll_one"
    $bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);

    $result = $manager->executeBulkWriteCommand($bulk);

    printf("Inserido(s) %d documento(s)\n", $result->getInsertedCount());
    printf("Atualizado(s) %d documento(s)\n", $result->getModifiedCount());

    ?>

O exemplo acima produzirá:

    Inserido(s) 3 documento(s)
    Atualizado(s) 1 documento(s)

Exemplo #2 Operações de gravação ordenadas causando um erro

    <?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("Inserido(s) %d documento(s)\n", $result->getInsertedCount());

    ?>

O exemplo acima produzirá algo semelhante a:

    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) {
        }
      }
    }
    Inserido(s) 2 documento(s)

## Veja Também

- MongoDB\Driver\Manager::executeBulkWriteCommand()
- MongoDB\Driver\BulkWriteCommandResult
- MongoDB\Driver\Exception\BulkWriteCommandException
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\WriteConcernError
- MongoDB\Driver\WriteError

## Índice

- MongoDB\Driver\BulkWriteCommand::__construct — Cria um novo BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::count — Conta o número de operações de gravação no BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::deleteMany — Adiciona uma operação deleteMany
- MongoDB\Driver\BulkWriteCommand::deleteOne — Adiciona uma operação deleteOne
- MongoDB\Driver\BulkWriteCommand::insertOne — Adiciona uma operação insertOne
- MongoDB\Driver\BulkWriteCommand::replaceOne — Adiciona uma operação replaceOne
- MongoDB\Driver\BulkWriteCommand::updateMany — Adiciona uma operação updateMany
- MongoDB\Driver\BulkWriteCommand::updateOne — Adiciona uma operação updateOne

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open