(mongodb >=1.0.0)
MongoDB\Driver\Manager::executeBulkWrite — Executa uma ou mais operações de escrita
$namespace
, MongoDB\Driver\BulkWrite $bulk
, array|MongoDB\Driver\WriteConcern|null $options
= null
): MongoDB\Driver\WriteResultExecuta uma ou mais operações de escrita no servidor primário.
Um MongoDB\Driver\BulkWrite pode ser construído com uma ou mais operações de escrita de vários tipos (por exemplo, atualizações, exclusões e inserções). O driver tentará enviar operações do mesmo tipo ao servidor no menor número possível de solicitações para otimizar viagens de ida e volta.
O valor padrão para a opção "writeConcern"
será
inferido de uma transação ativa (indicada pela
opção "session"
), seguida pelo
URI de conexão.
namespace
(string)
Um namespace totalmente qualificado (por exemplo, "nomeDoBancoDados.nomeDaColecao"
).
bulk
(MongoDB\Driver\BulkWrite)As gravações a serem executadas.
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\WriteResult em caso de sucesso.
bulk
não contiver operações de escrita.bulk
já tiver sido executado. Objetos MongoDB\Driver\BulkWrite não podem ser executados múltiplas vezes."session"
for usada em combinação com um write concern não confirmado.
Versão | Descrição |
---|---|
PECL mongodb 1.4.4 |
MongoDB\Driver\Exception\InvalidArgumentException
será lançado se a opção "session" for usada em combinação
com uma preocupação de gravação não reconhecida.
|
PECL mongodb 1.4.0 |
O terceiro parâmetro agora é um array options .
Para compatibilidade com versões anteriores, este parâmetro ainda aceitará um
objeto MongoDB\Driver\WriteConcern.
|
PECL mongodb 1.3.0 |
MongoDB\Driver\Exception\InvalidArgumentException
agora é lançada se bulk não contiver nenhuma operação
de escrita. Anteriormente, uma
MongoDB\Driver\Exception\BulkWriteException era
lançada.
|
Exemplo #1 Exemplo de MongoDB\Driver\Manager::executeBulkWrite()
<?php
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);
$bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
$bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->insert(['_id' => 4, 'x' => 2]);
$bulk->delete(['x' => 1], ['limit' => 1]);
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
$result = $manager->executeBulkWrite('db.collection', $bulk, $writeConcern);
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Matched %d document(s)\n", $result->getMatchedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
printf("Upserted %d document(s)\n", $result->getUpsertedCount());
printf("Deleted %d document(s)\n", $result->getDeletedCount());
foreach ($result->getUpsertedIds() as $index => $id) {
printf('upsertedId[%d]: ', $index);
var_dump($id);
}
/* Se o WriteConcern não puder ser atendido */
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
}
/* Se uma escrita não pôde acontecer */
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
}
?>
O exemplo acima produzirá algo semelhante a:
Inserted 3 document(s) Matched 1 document(s) Updated 1 document(s) Upserted 2 document(s) Deleted 1 document(s) upsertedId[3]: object(MongoDB\BSON\ObjectId)#5 (1) { ["oid"]=> string(24) "54d3adc3ce7a792f4d703756" } upsertedId[4]: int(3)