MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB bulkWrite()


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 como true se a operação foi executada com preocupação de gravação ou false 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.