Bulk()
Dica
O MongoDB também fornece o método db.collection.bulkWrite()
para executar operações de gravação em massa.
Descrição
Bulk()
Construtor de bulk operations usado para construir uma lista de write operations a serem executadas em bulk para uma única coleção. Para instanciar o construtor, utilize o método
db.collection.initializeOrderedBulkOp()
oudb.collection.initializeUnorderedBulkOp()
.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
Operações em massa ordenadas e não ordenadas
O construtor pode construir a lista de operações como ordenadas ou não ordenadas.
Operações ordenadas
Com uma lista de operações ordenadas, o MongoDB executa as operações de gravação na lista serialmente. Se ocorrer um erro durante o processamento de uma das operações de gravação, o MongoDB retornará sem processar as operações de gravação restantes na lista.
Utilize o db.collection.initializeOrderedBulkOp()
para criar um construtor para uma lista ordenada de comandos de escrita.
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.
Bulk()
operações 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, Bulk.getOperations()
após a execução.
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.
Operações não ordenadas
Com uma lista de operações não ordenadas, o MongoDB pode executar em paralelo, bem como em uma ordem não determinística, as operações de gravação na lista. Se ocorrer um erro durante o processamento de uma das operações de gravação, o MongoDB continuará processando as operações de gravação restantes na lista.
Utilize o db.collection.initializeUnorderedBulkOp()
para criar um construtor para uma lista não ordenada de comandos de escrita.
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.
Bulk()
operações 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, Bulk.getOperations()
após a execução.
Transações
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.
Métodos
O construtor Bulk()
tem os seguintes métodos:
Nome | Descrição |
---|---|
Adiciona uma operação de inserção a uma lista de operações. | |
Especifica a condição de consulta para uma atualização ou uma operação de remoção. | |
Adiciona uma operação de exclusão de vários documentos a uma lista de operações. | |
Adiciona uma única operação de exclusão de documento a uma lista de operações. | |
Um alias para Bulk.find.delete() . | |
Um alias para Bulk.find.deleteOne() . | |
Adiciona uma operação de substituição de documento único a uma lista de operações. | |
Adiciona uma única operação de atualização de documento a uma lista de operações. | |
Adiciona uma operação de atualização multi a uma lista de operações. | |
Especifica upsert: true para uma operação de atualização. | |
Executa uma série de operações em massa. | |
Retorna uma array de operações de gravação executadas no objeto de operações Bulk() . | |
Retorna um documento JSON que contém o número de operações e lotes no objeto de operações Bulk() . | |
Retorna os resultados de Bulk.toJSON() como uma string. |