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 __construct(?array $options = null)
public count(): int
public deleteMany(string $namespace, array|object $filter, ?array $options = null): void
public deleteOne(string $namespace, array|object $filter, ?array $options = null): void
public insertOne(string $namespace, array|object $document): mixed
public replaceOne(
    string $namespace,
    array|object $filter,
    array|object $replacement,
    ?array $options = null
): void
public updateMany(
    string $namespace,
    array|object $filter,
    array|object $update,
    ?array $options = null
): void
public 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)

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top