(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)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)