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:insertOneupdateOneupdateManyreplaceOnedeleteOnedeleteMany
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
acknowledgedcomotruese a operação foi executada com preocupação de gravação oufalsese a preocupação de gravação foi desativada. - Uma contagem para cada operação de gravação.
- Uma matriz contendo um
_idpara 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.