No MongoDB o
db.collection.bulkWrite()
O método executa várias operações de gravação com controles para ordem de execução. As operações de gravação em massa afetam uma única coleção. A
collection
parte é o nome da coleção com a qual executar as operações. Operações de gravação em massa
O
db.collection.bulkWrite()
pode ser usado para executar as seguintes operações de gravação:insertOne
updateOne
updateMany
replaceOne
deleteOne
deleteMany
Qualquer um desses métodos pode ser incluído em uma chamada para
db.collection.bulkWrite()
, e você pode incluir métodos diferentes na mesma chamada. Exemplo
Aqui está um exemplo de uso de
db.collection.bulkWrite()
para executar uma operação de gravação em massa em uma coleção chamada pets
:Suponha que inserimos os seguintes documentos em uma coleção chamada
pets
:db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog", weight: 20 },
{ _id: 2, name: "Bark", type: "Dog", weight: 10 },
{ _id: 3, name: "Meow", type: "Cat" },
{ _id: 4, name: "Scratch", type: "Cat" },
{ _id: 5, name: "Bruce", type: "Bat" }
])
Agora podemos usar
db.collection.bulkWrite()
para executar uma operação de gravação em massa nessa coleção. Exemplo:
db.pets.bulkWrite([
{ insertOne: { "document": { "_id": 6, "name": "Bubbles", "type": "Fish" }}},
{ updateOne : {
"filter" : { "_id" : 2 },
"update" : { $set : { "weight" : 15 } }
} },
{ deleteOne : { "filter" : { "_id" : 5 } } },
{ replaceOne : {
"filter" : { "_id" : 4 },
"replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 }
} }
])
Resultado:
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 1, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 6 }, "upsertedIds" : { } }
Nesse caso, inserimos um documento, atualizamos outro documento, excluímos outro e substituímos outro documento.
O
db.collection.bulkWrite()
método retorna o seguinte:- Um booleano
acknowledged
comotrue
se a operação foi executada com preocupação de gravação oufalse
se a preocupação de gravação foi desativada. - Uma contagem para cada operação de gravação.
- Uma matriz contendo um
_id
para cada documento inserido ou inserido com sucesso.
Visualizar o resultado
Agora vamos dar uma olhada nos documentos na coleção novamente.
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 15 } { "_id" : 3, "name" : "Meow", "type" : "Cat" } { "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 } { "_id" : 6, "name" : "Bubbles", "type" : "Fish" }
Podemos ver que todas as alterações foram feitas conforme especificado.
O ordered
Parâmetro
As operações de gravação em massa podem ser ordenadas ou não ordenadas. Por padrão, eles são ordenados.
Você pode especificar a ordem usando o parâmetro booleano ordenado. Fornecendo um valor de
true
torna uma lista ordenada de operações, definindo-a como false
torna uma lista não ordenada de operações. Com uma lista ordenada de operações, o MongoDB executa as operações em série. Se ocorrer um erro durante o processamento de uma das operações de gravação, o MongoDB retornará sem processar nenhuma operação de gravação restante na lista.
Com uma lista não ordenada de operações, o MongoDB pode executar as operações em paralelo (embora isso não seja garantido). 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.
Mais informações
O
db.collection.bulkWrite()
também aceita um writeConcern
argumento, que descreve o nível de reconhecimento solicitado do MongoDB para operações de gravação. Veja a documentação do MongoDB para
db.collection.bulkWrite()
Para maiores informações.