(mongodb >=2.1.0)
MongoDB\Driver\Manager::executeBulkWriteCommand — Executa operações de gravação usando o comando bulkWrite
$bulk
, ?array $options
= null
): MongoDB\Driver\BulkWriteCommandResultExecuta 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.
bulk
(MongoDB\Driver\BulkWriteCommand)O comando de gravações a ser executado.
options
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. |
Retorna MongoDB\Driver\BulkWriteCommandResult em caso de sucesso.
bulk
não contiver nenhuma operação de gravação.bulk
já tiver sido executado. Objetos MongoDB\Driver\BulkWriteCommand não podem ser executados várias vezes."session"
for usada em combinação com uma preocupação de escrita não confirmada.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)