Operações em massa
Nesta página
- Visão geral
- Dados de amostra
- Operações de inserção em massa
- Inserções em massa de collections
- Inserções em massa do cliente
- Operações de substituição em massa
- Coleções de substituições em massa
- Substituições em massa do cliente
- Operações de atualização em massa
- Atualizações em massa de coleções
- Atualizações em massa do cliente
- Operações de exclusão em massa
- Exclusões em massa de collections
- Exclusões em massa de clientes
- Tipo de devolução
- BulkWriteResult
- ClientBulkWriteResult
- Tratamento de exceções
- Exceções de gravação em massa da collection
- Exceções de gravação em massa do cliente
- Informações adicionais
- Documentação da API
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çãoem 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 movies
users
collections e no sample_mflix
banco de dados , 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
InsertOneModel
em uma array. CadaInsertOneModel
representa um documento para inserir na coleçãomovies
no banco de dadossample_mflix
.Chama o método
bulkWrite()
na coleçãomovies
e passa uma array de modelos como parâmetro.Imprime o número de documentos inseridos.
const insertModels = [{ insertOne: { document: { title: "The Favourite", year: 2018, rated: "R", released: "2018-12-21" } } }, { insertOne: { document: { title: "I, Tonya", year: 2017, rated: "R", released: "2017-12-08" } } }]; const insertResult = await movies.bulkWrite(insertModels); console.log(`Inserted documents: ${insertResult.insertedCount}`);
Inserted documents: 2
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
ClientBulkWriteModel
em 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.
const clientInserts = [{ namespace: "sample_mflix.movies", name: "insertOne", document: { title: "The Favourite", year: 2018, rated: "R", released: "2018-12-21" } }, { namespace: "sample_mflix.movies", name: "insertOne", document: { title: "I, Tonya", year: 2017, rated: "R", released: "2017-12-08" } }, { namespace: "sample_mflix.users", name: "insertOne", document: { name: "Brian Schwartz", email: "bschwartz@example.com" } }]; const clientInsertRes = await client.bulkWrite(clientInserts); console.log(`Inserted documents: ${clientInsertRes.insertedCount}`);
Inserted documents: 3
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 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
ReplaceOneModel
em uma array. As instânciasReplaceOneModel
contêm instruções para substituir documentos que representam filmes na coleçãomovies
.Chama o método
bulkWrite()
na coleçãomovies
e passa uma array de modelos como parâmetro.Imprime o número de documentos modificados.
const replaceOperations = [{ replaceOne: { filter: { title: "The Dark Knight" }, replacement: { title: "The Dark Knight Rises", year: 2012, rating: "PG-13" }, upsert: false } }, { replaceOne: { filter: { title: "Inception" }, replacement: { title: "Inception Reloaded", year: 2010, rating: "PG-13" }, upsert: false } }]; const replaceResult = await movies.bulkWrite(replaceOperations); console.log(`Modified documents: ${replaceResult.modifiedCount}`);
Modified documents: 2
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 guide. Type: Bson |
Exemplo
Este exemplo executa as seguintes ações:
Especifica três instâncias do
ClientBulkWriteModel
em uma array. Os dois primeiros modelos contêm instruções de substituição para documentos na collectionmovies
e 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.
const clientReplacements = [{ namespace: "sample_mflix.movies", name: "replaceOne", filter: { title: "The Dark Knight" }, replacement: { title: "The Dark Knight Rises", year: 2012, rating: "PG-13" } }, { namespace: "sample_mflix.movies", name: "replaceOne", filter: { title: "Inception" }, replacement: { title: "Inception Reloaded", year: 2010, rating: "PG-13" } }, { namespace: "sample_mflix.users", name: "replaceOne", filter: { name: "April Cole" }, replacement: { name: "April Franklin", email: "aprilfrank@example.com" } }]; const clientReplaceRes = await client.bulkWrite(clientReplacements); console.log(`Modified documents: ${clientReplaceRes.modifiedCount}`);
Modified documents: 3
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 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
UpdateOneModel
e uma instânciaUpdateManyModel
em uma array. Esses modelos contêm instruções para atualizar documentos que representam filmes na coleçãomovies
.Chama o método
bulkWrite()
na coleçãomovies
e passa uma array de modelos como parâmetro.Imprime o número de documentos modificados.
const updateOperations = [{ updateOne: { filter: { title: "Interstellar" }, update: { $set: { title: "Interstellar Updated", genre: "Sci-Fi Adventure" } }, upsert: true } }, { updateMany: { filter: { rated: "PG-13" }, update: { $set: { rated: "PG-13 Updated", genre: "Updated Genre" } } } }]; const updateResult = await movies.bulkWrite(updateOperations); console.log(`Modified documents: ${updateResult.modifiedCount}`);
Modified documents: 2320
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 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
ClientBulkWriteModel
em uma array. O primeiro modelo especifica uma operação de atualização muitos na coleçãomovies
e 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.
const clientUpdates = [{ namespace: "sample_mflix.movies", name: "updateMany", filter: { rated: "PG-13" }, update: { $set: { rated: "PG-13 Updated", genre: "Updated Genre" } }, upsert: false }, { namespace: "sample_mflix.users", name: "updateOne", filter: { name: "Jon Snow" }, update: { $set: { name: "Aegon Targaryen", email: "targaryen@example.com" } }, upsert: false }]; const clientUpdateRes = await client.bulkWrite(clientUpdates); console.log(`Modified documents: ${clientUpdateRes.modifiedCount}`);
Modified documents: 2320
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 guide. Type: String or Object |
Exemplo
Este exemplo executa as seguintes ações:
Especifica uma instância
DeleteOneModel
e uma instânciaDeleteManyModel
em uma array. Esses modelos contêm instruções para excluir documentos na coleçãomovies
.Chama o método
bulkWrite()
na coleçãomovies
e passa uma array de modelos como parâmetro.Imprime o número de documentos excluídos.
const deleteOperations = [{ deleteOne: { filter: { title: "Dunkirk" } } }, { deleteMany: { filter: { rated: "R" } } }]; const deleteResult = await movies.bulkWrite(deleteOperations); console.log(`Deleted documents: ${deleteResult.deletedCount}`);
Deleted documents: 5538
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 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
ClientBulkWriteModel
em uma array. O primeiro modelo especifica uma operação para excluir muitos na collectionmovies
e 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.
const clientDeletes = [{ namespace: "sample_mflix.movies", name: "deleteMany", filter: { rated: "R" } }, { namespace: "sample_mflix.users", name: "deleteOne", filter: { email: "emilia_clarke@gameofthron.es" } }]; const clientDeleteRes = await client.bulkWrite(clientDeletes); console.log(`Deleted documents: ${clientDeleteRes.deletedCount}`);
Deleted documents: 5538
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: