Executa operações de gravação usando o comando bulkWrite

# MongoDB\Driver\Manager::executeBulkWriteCommand

(mongodb >=2.1.0)

MongoDB\Driver\Manager::executeBulkWriteCommand — Executa operações de gravação usando o comando bulkWrite

### Descrição

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

Executa uma ou mais operações de gravação no servidor primário usando o comando » bulkWrite introduzido no MongoDB 8.0.

Um MongoDB\Driver\BulkWriteCommand pode ser construído com uma ou mais operações de gravação de tipos variados (por exemplo, inserções, atualizações e exclusões). Cada operação de gravação pode ter como alvo uma coleção diferente.

O valor padrão para a opção `"writeConcern"` será inferido a partir de uma transação ativa (indicada pela opção `"session"`), seguida pelo URI de conexão.

### Parâmetros

`bulk` (MongoDB\Driver\BulkWriteCommand)
  O comando de gravações a ser executado.
`options`

  Opções
  Opção | Tipo | Descrição
  --- | --- | ---
  session | MongoDB\Driver\Session | Uma sessão para associar à operação.
  writeConcern | MongoDB\Driver\WriteConcern | Um write concern a ser aplicado à operação.

### Valor Retornado

Retorna MongoDB\Driver\BulkWriteCommandResult em caso de sucesso.

### Erros/Exceções

- Lança MongoDB\Driver\Exception\InvalidArgumentException se `bulk` não contiver nenhuma operação de gravação.
- Lança MongoDB\Driver\Exception\InvalidArgumentException se `bulk` já tiver sido executado. Objetos MongoDB\Driver\BulkWriteCommand não podem ser executados várias vezes.
- Lança uma exceção MongoDB\Driver\Exception\InvalidArgumentException se a opção `"session"` for usada em combinação com uma preocupação de escrita não confirmada.
- Lança uma exceção MongoDB\Driver\Exception\InvalidArgumentException em caso de erro ao analisar argumentos.
- Lança uma exceção MongoDB\Driver\Exception\ConnectionException se a conexão com o servidor falhar (por outros motivos além da autenticação).
- Lança uma exceção MongoDB\Driver\Exception\AuthenticationException se a autenticação for necessária e falhar.
- Lança uma exceção MongoDB\Driver\Exception\BulkWriteCommandException em caso de qualquer falha de escrita (por exemplo, falha no comando, erro de escrita ou de preocupação de escrita)
- Lança MongoDB\Driver\Exception\RuntimeException em outros erros.

### 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\BulkWriteCommand
- MongoDB\Driver\BulkWriteCommandResult
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\Server::executeBulkWriteCommand() - Executa operações de gravação neste servidor usando o comando bulkWrite

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