MongoDB\Driver\Manager::executeBulkWrite

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeBulkWriteExecuta uma ou mais operações de escrita

Descrição

final public MongoDB\Driver\Manager::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $bulk, array|MongoDB\Driver\WriteConcern|null $options = null): MongoDB\Driver\WriteResult

Executa 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.

Parâmetros

namespace (string)

Um namespace totalmente qualificado (por exemplo, "nomeDoBancoDados.nomeDaColecao").

bulk (MongoDB\Driver\BulkWrite)

As gravações a serem executadas.

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\WriteResult em caso de sucesso.

Erros/Exceções

Registro de Alterações

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.

Exemplos

Example #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)

Veja Também