Visão geral
Neste guia, você pode aprender a usar o driver Node.js para executar operações em massa. Operações em massa ajudam a reduzir o número de chamadas para o servidor. Em vez de enviar uma solicitação para cada operação, você pode realizar várias operações em uma ação.
Dica
Para saber mais sobre operações em massa, consulte Operações de gravação em massa no manual do MongoDB Server.
Você pode usar operações em massa para executar várias operações de gravação em uma coleção. Você também pode executar operações em massa a partir do cliente, o que permite realizar gravações em massa em vários namespaces. No MongoDB, um namespace consiste no nome do banco de dados e o nome da coleção no formato <database>.<collection>.
Este guia inclui as seguintes seções:
Operações de inserção em massa descreve como realizar operações de inserção em massa em sua collection ou cliente.
Operações de substituição em massa descreve como executar operações de substituição em massa em sua collection ou cliente.
Bulk Update Operations descreve como executar operações de atualização em massa em sua collection ou cliente.
Operações de exclusão em massa descreve como executar operações de exclusão em massa em sua collection ou cliente.
OTipo de Retorno descreve o objeto de retorno que resulta de suas operações de escrita em massa.
Tratamento de exceções descreve as exceções que ocorrem se qualquer uma das operações de gravação em massa falhar.
Informações adicionais fornecem links para recursos e documentação de API para os tipos e métodos mencionados neste guia.
Importante
Requisitos de versão do servidor e do driver
As operações de gravação em massa em nível de collection exigem as seguintes versões:
MongoDB Server versão 3.2 ou posterior
Versão do driver Node.js 3.6 ou posterior
As operações de gravação em massa no nível do cliente exigem as seguintes versões:
MongoDB Server versão 8.0 ou posterior
Versão do driver Node.js 6.10 ou posterior
Dados de amostra
Os exemplos neste guia usam as collections movies e users no banco de dados sample_mflix, que está incluído nos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas.
Operações de inserção em massa
Para executar uma operação de inserção em massa, crie um modelo de operação em massa para cada documento que você deseja inserir. Em seguida, passe uma lista desses modelos para o método bulkWrite().
Esta seção descreve como executar os seguintes tipos de operações em massa:
Inserções em massa de collections
Para executar uma operação de inserção em massa na sua collection, crie um InsertOneModel para cada operação. Em seguida, chame o método bulkWrite() em sua coleção e passe uma array de modelos como parâmetro. Para criar um InsertOneModel, especifique o campo document do modelo e defina-o para o documento que você deseja inserir.
Exemplo
Este exemplo executa as seguintes ações:
Especifica duas instâncias do
InsertOneModelem uma array. CadaInsertOneModelrepresenta um documento para inserir na coleçãomoviesno banco de dadossample_mflix.Chama o método
bulkWrite()na coleçãomoviese passa uma array de modelos como parâmetro.Imprime o número de documentos inseridos.
Inserções em massa do cliente
Para executar uma operação de inserção em massa em múltiplas coleções ou bancos de dados, crie um ClientBulkWriteModel para cada operação. Em seguida, chame o método bulkWrite() em seu cliente e passe uma array de modelos como parâmetro.
A tabela seguinte descreve os campos que você pode configurar em um ClientBulkWriteModel para especificar uma operação de inserção:
Campo | Descrição |
|---|---|
| The namespace in which to insert a document. Type: String |
| The operation you want to perform. For insert operations,
set this field to "insertOne".Type: String |
| The document to insert. Type: Document |
Exemplo
Este exemplo executa as seguintes ações:
Especifica três instâncias do
ClientBulkWriteModelem uma array. Os dois primeiros modelos representam documentos a inserir na collectionmovies, e o último modelo representa um documento a ser inserido na collectionusers.Chama o método
bulkWrite()em um cliente e passa uma array de modelos como um parâmetro.Imprime o número de documentos inseridos.
Operações de substituição em massa
Para executar uma operação de substituição em massa, crie um modelo de operação em massa para cada documento que deseja substituir. Em seguida, passe uma lista desses modelos para o método bulkWrite().
Esta seção descreve como executar os seguintes tipos de operações em massa:
Coleções de substituições em massa
Para executar uma operação de substituição em massa na sua collection, crie um ReplaceOneModel para cada operação. Em seguida, chame o método bulkWrite() em sua coleção e passe uma array de modelos como parâmetro.
A tabela a seguir descreve os campos que você pode definir em um ReplaceOneModel:
Campo | Descrição |
|---|---|
| The filter that matches the document you want to replace. Type: Document |
| The replacement document. Type: Document |
| (Optional) The collation to use when sorting results. To learn more
about collations, see the Collations guide. Type: String or Object |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: Bson |
| (Optional) Whether a new document is created if no document matches the filter. By default, this field is set to false.Type: Boolean |
Exemplo
Este exemplo executa as seguintes ações:
Especifica duas instâncias do
ReplaceOneModelem uma array. As instânciasReplaceOneModelcontêm instruções para substituir documentos que representam filmes na coleçãomovies.Chama o método
bulkWrite()na coleçãomoviese passa uma array de modelos como parâmetro.Imprime o número de documentos modificados.
Substituições em massa do cliente
Para executar uma operação de substituição em massa em múltiplas coleções ou bancos de dados, crie um ClientBulkWriteModel para cada operação. Em seguida, chame o método bulkWrite() em seu cliente e passe uma array de modelos como parâmetro.
A tabela seguinte descreve os campos que você pode configurar em um ClientBulkWriteModel para especificar uma operação de substituição:
Campo | Descrição |
|---|---|
| The namespace in which to replace a document. Type: String |
| The operation you want to perform. For replace operations,
set this field to "replaceOne".Type: String |
| The filter that matches the document you want to replace. Type: Document |
| The replacement document. Type: Document |
| (Optional) The collation to use when sorting results. To learn more
about collations, see the Collations guide. Type: String or Object |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: Bson |
Exemplo
Este exemplo executa as seguintes ações:
Especifica três instâncias do
ClientBulkWriteModelem uma array. Os dois primeiros modelos contêm instruções de substituição para documentos na collectionmoviese o último modelo contém instruções de substituição para um documento na collectionusers.Chama o método
bulkWrite()em um cliente e passa uma array de modelos como um parâmetro.Imprime o número de documentos modificados.
Operações de atualização em massa
Para executar uma operação de atualização em massa, crie um modelo de operação em massa para cada atualização que você deseja fazer. Em seguida, passe uma lista desses modelos para o método bulkWrite().
Esta seção descreve como executar os seguintes tipos de operações em massa:
Atualizações em massa de coleções
Para executar uma operação de atualização em massa na sua collection, crie um UpdateOneModel ou UpdateManyModel para cada operação. Em seguida, chame o método bulkWrite() em sua collection e passe uma array de modelos como parâmetro. Um UpdateOneModel atualiza somente um documento que corresponde a um filtro, enquanto um UpdateManyModel atualiza todos os documentos que correspondem a um filtro.
A tabela a seguir descreve os campos que você pode definir em um UpdateOneModel ou UpdateManyModel:
Campo | Descrição |
|---|---|
| The filter that matches one or more documents you want to update. When
specified in an UpdateOneModel, only the first matching document will
be updated. When specified in an UpdateManyModel, all matching documents
will be updated.Type: Document |
| The update to perform. Type: Document |
| (Optional) A set of filters specifying which array elements an update
applies to if you are updating an array-valued field. Type: Array |
| (Optional) The collation to use when sorting results. To learn more about
collations, see the Collations guide. Type: Object |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: String or Object |
| (Optional) Whether a new document is created if no document matches the filter.
By default, this field is set to false.Type: Boolean |
Exemplo
Este exemplo executa as seguintes ações:
Especifica uma instância
UpdateOneModele uma instânciaUpdateManyModelem uma array. Esses modelos contêm instruções para atualizar documentos que representam filmes na coleçãomovies.Chama o método
bulkWrite()na coleçãomoviese passa uma array de modelos como parâmetro.Imprime o número de documentos modificados.
Atualizações em massa do cliente
Para executar uma operação de atualização em massa em múltiplas coleções ou bancos de dados, crie um ClientBulkWriteModel para cada operação. Em seguida, chame o método bulkWrite() em seu cliente e passe uma array de modelos como parâmetro.
A tabela seguinte descreve os campos que você pode configurar em um ClientBulkWriteModel para especificar uma operação de atualização:
Campo | Descrição |
|---|---|
| The namespace in which to update a document. Type: String |
| The operation you want to perform. For update operations,
set this field to "updateOne" or "updateMany".Type: String |
| The filter that matches one or more documents you want to update. If
you set the model name to "updateOne", only the first matching
document is updated. If you set name to "updateMany", all
matching documents are updated.Type: Document |
| The updates to perform. Type: Document or Document[] |
| (Optional) A set of filters specifying which array elements an update
applies to if you are updating an array-valued field. Type: Document[] |
| (Optional) The collation to use when sorting results. To learn more about
collations, see the Collations guide. Type: Document |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: Document or String |
| (Optional) Whether a new document is created if no document matches the filter.
By default, this field is set to false.Type: Boolean |
Exemplo
Este exemplo executa as seguintes ações:
Especifica duas instâncias do
ClientBulkWriteModelem uma array. O primeiro modelo especifica uma operação de atualização muitos na coleçãomoviese o segundo modelo especifica uma operação de atualização um na coleçãousers.Chama o método
bulkWrite()em um cliente e passa uma array de modelos como um parâmetro.Imprime o número de documentos modificados.
Operações de exclusão em massa
Para executar uma operação de exclusão em massa, crie um modelo de operação em massa para cada operação de exclusão. Em seguida, passe uma lista desses modelos para o método bulkWrite().
Esta seção descreve como executar os seguintes tipos de operações em massa:
Exclusões em massa de collections
Para executar uma operação de exclusão em massa em sua collection, crie um DeleteOneModel ou DeleteManyModel para cada operação. Em seguida, chame o método bulkWrite() em sua collection e passe uma array de modelos como parâmetro. Um DeleteOneModel exclui apenas um documento que corresponde a um filtro, enquanto um DeleteManyModel exclui todos os documentos que correspondem a um filtro.
A tabela a seguir descreve os campos que você pode definir em DeleteOneModel ou DeleteManyModel:
Campo | Descrição |
|---|---|
| The filter that matches one or more documents you want to delete. When
specified in a DeleteOneModel, only the first matching document will
be deleted. When specified in a DeleteManyModel, all matching documents
will be deleted.Type: Document |
| (Optional) The collation to use when sorting results. To learn more about
collations, see the Collations guide. Type: Object |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: String or Object |
Exemplo
Este exemplo executa as seguintes ações:
Especifica uma instância
DeleteOneModele uma instânciaDeleteManyModelem uma array. Esses modelos contêm instruções para excluir documentos na coleçãomovies.Chama o método
bulkWrite()na coleçãomoviese passa uma array de modelos como parâmetro.Imprime o número de documentos excluídos.
Exclusões em massa de clientes
Para executar uma operação de exclusão em massa em várias coleções ou bancos de dados, crie um ClientBulkWriteModel para cada operação. Em seguida, chame o método bulkWrite() em seu cliente e passe uma array de modelos como parâmetro.
A tabela seguinte descreve os campos que você pode configurar em um ClientBulkWriteModel para especificar uma operação de exclusão:
Campo | Descrição |
|---|---|
| The namespace in which to delete a document. Type: String |
| The operation you want to perform. For delete operations,
set this field to "deleteOne" or "deleteMany".Type: String |
| The filter that matches one or more documents you want to delete. If
you set the model name to "deleteOne", only the first matching
document is deleted. If you set name to "deleteMany", all
matching documents are deleted.Type: Document |
| (Optional) The index to use for the operation. To learn more about
indexes, see the Indexes on Collections guide. Type: Document or String |
| (Optional) The collation to use when sorting results. To learn more about
collations, see the Collations guide. Type: Document |
Exemplo
Este exemplo executa as seguintes ações:
Especifica duas instâncias do
ClientBulkWriteModelem uma array. O primeiro modelo especifica uma operação para excluir muitos na collectionmoviese o segundo modelo especifica uma operação para excluir um na collectionusers.Chama o método
bulkWrite()em um cliente e passa uma array de modelos como um parâmetro.Imprime o número de documentos modificados.
Tipo de devolução
BulkWriteResult
O método Collection.bulkWrite() retorna um objeto BulkWriteResult, que fornece informações sobre sua operação em massa.
As tabelas a seguir descrevem os campos de um objeto BulkWriteResult :
Campo | Descrição |
|---|---|
| O número de documentos inseridos |
| O número de documentos correspondentes |
| O número de documentos atualizados |
| O número de documentos atualizados |
| O número de documentos excluídos |
ClientBulkWriteResult
O método MongoClient.bulkWrite() retorna um objeto ClientBulkWriteResult , que inclui informações sobre a operação de gravação em massa do cliente .
As tabelas a seguir descrevem os campos de um objeto ClientBulkWriteResult :
Campo | Descrição |
|---|---|
| Um valor booleano indicando se a escrita em massa foi reconhecida |
| O número de documentos inseridos |
| O número de documentos correspondentes |
| O número de documentos atualizados |
| O número de documentos atualizados |
| O número de documentos excluídos |
| Os resultados de cada operação de inserção individual bem-sucedida |
| Os resultados de cada operação de atualização bem-sucedida individual |
| Os resultados de cada operação individual de exclusão bem-sucedida |
Tratamento de exceções
Exceções de gravação em massa da collection
Se alguma operação de gravação em massa chamada em uma collection não for bem-sucedida, o driver Node.js lançará um MongoBulkWriteError e não executará mais nenhuma operação se a opção ordered estiver definida como true. Se ordered estiver definido como false, ele tentará continuar com as operações subsequentes.
Dica
Para saber mais sobre operações em massa ordenadas e não ordenadas, consulte a seção Operações ordenadas versus não ordenadas no guia de escrita em massa do manual do MongoDB Server.
Um objeto MongoBulkWriteError contém as seguintes propriedades:
Propriedade | Descrição |
|---|---|
| The error message. Type: String |
| An array of errors that occurred during the bulk write operation. Type: BulkWriteError[] |
| Write concern errors that occurred during execution of the bulk write operation. Type: WriteConnectionError[] |
| The results of any successful operations performed before the exception was
thrown. Type: BulkWriteResult[] |
| The underlying error object, which may contain more details. Type: Error |
Exceções de gravação em massa do cliente
Se alguma operação de gravação em massa chamada em seu cliente não tiver êxito, o driver do Node.js gerará um MongoClientBulkWriteError. Por padrão, o driver não executa nenhuma operação subsequente após encontrar um erro. Se você passar a opção ordered para o método bulkWrite() e defini-la como false, o driver continuará tentando as operações restantes.
Um objeto MongoClientBulkWriteError contém as seguintes propriedades:
Propriedade | Descrição |
|---|---|
| An array of documents specifying each write concern error. Type: Document[] |
| An map of errors that occurred during individual write operations. Type: Map<number, ClientBulkWriteError> |
| The partial result of the client bulk write that reflects the operation's
progress before the error. Type: ClientBulkWriteResult |
Informações adicionais
Para saber mais sobre operações em massa, consulte Operações de gravação em massa no manual do MongoDB Server.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: