Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Bulk.execute()

Nesta página

  • Descrição
  • Comportamento
  • Exemplos

Dica

O MongoDB também fornece o método db.collection.bulkWrite() para executar operações de gravação em massa.

Bulk.execute()

Executa a lista de operações criadas pelo construtor de operações do Bulk().

Bulk.execute() aceita o seguinte parâmetro:

Parâmetro
Tipo
Descrição
writeConcern
documento

Opcional. Documento de preocupação de gravação para a operação em massa como um todo. Omita o uso padrão. Para um servidor mongod autônomo, o padrão da preocupação de gravação é { w: majority }. Com um conjunto de réplicas, a preocupação de gravação padrão é { w: majority }, a menos que seja modificada como parte da configuração do conjunto de réplicas ou potencialmente se o conjunto de réplicas contiver vários arbiters.

Consulte Substituir preocupação de gravação padrão para obter um exemplo.

Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern.

Retorna:Um objeto BulkWriteResult() que contém o status da operação.

Após a execução, você não pode executar novamente o objeto Bulk() sem reinicializar. Consulte db.collection.initializeUnorderedBulkOp() e db.collection.initializeOrderedBulkOp().

Ao executar uma lista ordered de operações, o MongoDB agrupa as operações por operation type e contiguidade, ou seja, operações contíguas do mesmo tipo são agrupadas. Por exemplo, se uma lista ordenada tiver duas operações de inserção seguidas por uma operação de atualização seguida por outra operação de inserção, o MongoDB agrupa as operações em três grupos separados: o primeiro contém as duas operações de inserção, o grupo contém a operação de atualização e o terceiro contém a última operação de inserção. Esse comportamento está sujeito a alterações em versões futuras.

Operações Bulk() em mongosh e métodos comparáveis nos drivers não têm um limite para o número de operações em um grupo. Para ver como as operações são agrupadas para execução de operações em massa, chame Bulk.getOperations() após a execução.

Dica

Veja também:

A execução de uma lista de operações ordered em uma collection fragmentada geralmente será mais lenta do que a execução de uma lista unordered, já que, com uma lista ordenada, cada operação deve aguardar a conclusão da operação anterior.

Ao executar uma lista unordered de operações, o MongoDB agrupa as operações. Com uma operação em massa não ordenada, as operações na lista podem ser reordenadas para aumentar o desempenho. Dessa forma, os aplicativos não devem depender da ordem ao executar unordered operações em massa.

Operações Bulk() em mongosh e métodos comparáveis nos drivers não têm um limite para o número de operações em um grupo. Para ver como as operações são agrupadas para execução de operações em massa, chame Bulk.getOperations() após a execução.

Bulk() pode ser usado dentro de transações distribuídas.

Para operações Bulk.insert(), a collection já deve existir.

Para Bulk.find.upsert(), se a operação resultar em um upsert, a collection já deverá existir.

Não defina explicitamente a preocupação de gravação para a operação se for executada em uma transação. Para usar write concern com transações, consulte Transações e write concern.

Importante

Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.

Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.

O seguinte inicializa um construtor de operações de Bulk() na collection items, adiciona uma série de operações de inserção e executa as operações:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );
bulk.execute( );

A operação retorna o seguinte objeto BulkWriteResult():

BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})

Para obter detalhes sobre o objeto de retorno, consulte BulkWriteResult(). Para detalhes sobre os lotes executados, consulte Bulk.getOperations().

A operação a seguir para um conjunto de réplicas especifica uma referência de escrita de "w: 1" com um wtimeout de 5000 milissegundos, de modo que o método retorne após as gravações se propagarem para a maioria dos membros do conjunto de réplicas de votação ou o método expire após 5 segundos.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "efg123", status: "A", defaultQty: 100, points: 0 } );
bulk.insert( { item: "xyz123", status: "A", defaultQty: 100, points: 0 } );
bulk.execute( { w: 1, wtimeout: 5000 } );

A operação retorna o seguinte objeto BulkWriteResult():

BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})

Dica

Consulte:

Bulk() para obter uma lista dos métodos disponíveis para operações em massa.

Voltar

A granel