sql >> Base de Datos >  >> NoSQL >> MongoDB

Escritura masiva de MongoDB ()

En MongoDB el db.collection.bulkWrite() El método realiza múltiples operaciones de escritura con controles para el orden de ejecución.

Las operaciones de escritura masiva afectan a una sola colección. La collection part es el nombre de la colección con la que realizar las operaciones.

Operaciones de escritura masiva

db.collection.bulkWrite() El método se puede utilizar para realizar las siguientes operaciones de escritura:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

Cualquiera de estos métodos se puede incluir dentro de una llamada a db.collection.bulkWrite() , y puede incluir diferentes métodos en la misma llamada.

Ejemplo

Aquí hay un ejemplo del uso de db.collection.bulkWrite() para realizar una operación de escritura masiva en una colección llamada pets :

Supongamos que insertamos los siguientes documentos en una colección llamada 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" }
    ])

Ahora podemos usar db.collection.bulkWrite() para realizar una operación de escritura masiva en esa colección.

Ejemplo:

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" : {
		
	}
}

En este caso, insertamos un documento, actualizamos otro documento, eliminamos otro y reemplazamos otro documento.

db.collection.bulkWrite() método devuelve lo siguiente:

  • Un acknowledged como true si la operación se ejecutó con problemas de escritura o false si el problema de escritura estaba deshabilitado.
  • Un recuento por cada operación de escritura.
  • Una matriz que contiene un _id para cada documento insertado o alterado con éxito.

Ver el resultado

Ahora echemos un vistazo a los documentos de la colección nuevamente.

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 todos los cambios se realizaron según lo especificado.

El ordered Parámetro

Las operaciones de escritura masiva se pueden ordenar o desordenar. Por defecto, están ordenados.

Puede especificar el orden utilizando el parámetro booleano ordenado. Proporcionar un valor de true lo convierte en una lista ordenada de operaciones, estableciéndolo en false lo convierte en una lista desordenada de operaciones.

Con una lista ordenada de operaciones, MongoDB ejecuta las operaciones en serie. Si ocurre un error durante el procesamiento de una de las operaciones de escritura, MongoDB regresará sin procesar ninguna operación de escritura restante en la lista.

Con una lista desordenada de operaciones, MongoDB puede ejecutar las operaciones en paralelo (aunque esto no está garantizado). Si ocurre un error durante el procesamiento de una de las operaciones de escritura, MongoDB continuará procesando las operaciones de escritura restantes en la lista.

Más información

db.collection.bulkWrite() El método también acepta un writeConcern argumento, que describe el nivel de reconocimiento solicitado de MongoDB para operaciones de escritura.

Consulte la documentación de MongoDB para db.collection.bulkWrite() para más información.