Definição
Mongo.bulkWrite() executa diversas operações de gravação em vários bancos de dados e coleções em uma única chamada, ao contrário db.collection.bulkWrite() do que opera em uma única coleção.
Observação
Exige MongoDB 8.0 ou posterior.
Sintaxe
Você pode chamar bulkWrite() na instância Mongo() atual usando a seguinte sintaxe:
db.getMongo().bulkWrite( [ { namespace: "<db1.collection1>", name: "insertOne", document: { ... } }, { namespace: "<db2.collection2>", name: "replaceOne", filter: { ... } } ], { ordered: boolean, verboseResults: boolean, bypassDocumentValidation: boolean, let: Document } )
Você também pode chamá-lo em uma instância Mongo diferente, como no exemplo a seguir:
const otherMongo = Mongo("<other connection string>"); otherMongo.bulkWrite([{ namespace: "<db.collection>", ... }]);
bulkWrite() aceita dois parâmetros:
Parâmetro | Tipo | Descrição |
|---|---|---|
| matriz de documentos | Define uma array de operações de gravação. Cada documento na array representa uma operação de gravação que você deseja executar. |
| Documento | Define opções para a operação. |
Um documento no operations pode representar uma de seis operações:
insertOne
replaceOne
UpdateOne
updateMany
Excluir um
deleteMany
As seções a seguir descrevem a sintaxe que você deve usar para documentos que representam cada operação.
insertOne
{ namespace: '<db.collection>', name: 'insertOne', document: Document }
Campo | Tipo | Descrição |
|---|---|---|
| String | O banco de dados e a coleção para a operação de inserção. |
| String | O nome da operação. Defina como |
| Documento | O documento a inserir. |
Observação
Se o documento não incluir um campo _id, o mongosh gera automaticamente um.
Atualizar um e atualizar muitos
updateOne atualiza o primeiro documento correspondente ao filtro. updateMany atualiza todos os documentos correspondentes ao filtro.
{ namespace: '<db>.<collection>', name: 'updateOne' | 'updateMany', filter: Document, update: Document | Document[], arrayFilters?: Document[], hint?: Document | string, collation?: Document, upsert?: boolean }
Campo | Tipo | Descrição |
|---|---|---|
| String | O banco de dados e a coleção para a operação de atualização. |
| String | O nome da operação. Defina como |
| Documento | O filtro que corresponde a um ou mais documentos que você deseja atualizar. |
| Documento ou array de documentos | A atualização a ser executada. |
| matriz de documentos | Opcional. Filtros para especificar quais elementos de array atualizar se você atualizar um campo com valor de array. |
| Documento ou string | Opcional. O índice a ser usado para a operação. |
| Documento | (Opcional) O agrupamento a ser usado ao classificar os resultados. |
| Boolean | Opcional. Se |
replaceOne
{ namespace: '<db>.<collection>', name: 'replaceOne', filter: Document, replacement: Document, hint?: Document | string, collation?: Document }
Campo | Tipo | Descrição |
|---|---|---|
| String | O banco de dados e a coleta para a operação de substituição. |
| String | O nome da operação. Defina como |
| Documento | O filtro que corresponde ao documento que você deseja atualizar. |
| Documento | O documento de substituição. |
| Documento ou string | Opcional. O índice a ser usado para a operação. |
| Documento | (Opcional) O agrupamento a ser usado ao classificar os resultados. |
Excluir um ou muitos
deleteOne exclui o primeiro documento correspondente ao filtro. deleteMany exclui todos os documentos correspondentes ao filtro.
{ namespace: '<db>.<collection>', name: 'deleteOne' | 'deleteMany', filter: Document, hint?: Document | string, collation?: Document }
Campo | Tipo | Descrição |
|---|---|---|
| String | O banco de dados e a coleta para a operação de exclusão. |
| String | O nome da operação. Defina como |
| Documento | O seletor de query para combinar documentos a serem excluídos. |
| Documento ou string | Opcional. O índice a ser usado para a operação. |
| Documento | Opcional. O agrupamento a ser usado para a operação. |
Opções
{ ordered?: boolean, verboseResults?: boolean, bypassDocumentValidation?: boolean, let?: Document }
Campo | Tipo | Descrição |
|---|---|---|
| Boolean | (Opcional) Indica que o MongoDB executa a gravação em massa na ordem dos documentos que você fornece. Se |
| Boolean | (Opcional) Especifica se |
| Boolean | (Opcional) Especifica se a operação de gravação ignora as regras de validação do documento . Padrão é |
| Documento | (Opcional) Documento de nomes e valores de parâmetros que você pode acessar com variáveis de agregação. |
Saída
bulkWrite() retorna um objeto com os seguintes campos:
{ acknowledged: boolean, insertedCount: int, matchedCount: int, modifiedCount: int, deletedCount: int, upsertedCount: int, insertResults?: map(int, document), updateResults?: map(int, document), deleteResults?: map(int, document) }
Campo | Tipo | Descrição |
|---|---|---|
| booleano |
|
| inteiro | Número de documentos inseridos. |
| inteiro | Número de documentos correspondentes por filtro. |
| inteiro | Número de documentos modificados. |
| inteiro | Número de documentos excluídos. |
| inteiro | Número de documentos atualizados. |
| Mapa de inteiros para documentos | Opcional. Representa os resultados de cada operação de inserção bem-sucedida. Cada operação é representada por uma chave de número inteiro, que contém um documento com informações correspondentes à operação. O documento inclui o seguinte campo:
|
| Mapa de inteiros para documentos | Opcional. Representa os resultados de cada operação de atualização bem-sucedida. Cada operação é representada por uma chave de número inteiro, que contém um documento com informações correspondentes à operação. O documento inclui os seguintes campos:
|
| Mapa de inteiros para documentos | Opcional. Representa os resultados de cada operação de exclusão bem-sucedida. Cada operação é representada por uma chave de número inteiro, que contém um documento com informações correspondentes à operação. O documento inclui o seguinte campo:
|
Exemplos
Este exemplo usa Mongo.bulkWrite() para executar as seguintes operações em ordem:
insere um documento na coleção
db.authorsinsere um documento na coleção
db.booksatualiza o documento anterior
db.getMongo().bulkWrite( [ { namespace: 'db.authors', name: 'insertOne', document: { name: 'Stephen King' } }, { namespace: 'db.books', name: 'insertOne', document: { name: 'It' } }, { namespace: 'db.books', name: 'updateOne', filter: { name: 'It' }, update: { $set: { year: 1986 } } } ], { ordered: true, bypassDocumentValidation: true } )
mongosh executa a gravação em massa para e retorna o seguinte documento:
{ acknowledged: true, insertedCount: 2, matchedCount: 1, modifiedCount: 1, deletedCount: 0, upsertedCount: 0, insertResults: { '1': { insertedId: ObjectId('67ed8ce8efd926c84cab7945') }, '2': { insertedId: ObjectId('67ed8ce8efd926c84cab7946') } } updateResults: { '1': { matchedCount: 1, modifiedCount: 1, didUpsert: false } } }