MongoDB – Método db.collection.bulkWrite()

MongoDB es una base de datos NoSQL basada en documentum versátil y tiene la capacidad de realizar operaciones de escritura de base de datos de manera eficiente por medio de su método bulkWrite() . Eso significa que se pueden insertar/actualizar/eliminar varios documentos de una sola vez.

  • Este método se puede utilizar en transacciones de varios documentos.
  • Si este método encuentra un error en la transacción, lanzará una BulkWriteException.
  • De forma predeterminada, este método ejecuta las operaciones en orden.

Sintaxis:

db.colección.bulkWrite(

[ <opr1>, <opr2>, …,<oprn> ],

{

     writeConcern : <su documento y esto es opcional>,

     ordenado: <verdadero/falso, por defecto es verdadero y esto es opcional>

}

)

Parámetros:

  • [ <opr1>, <opr2>, …,<oprn> ]: Es una array de operaciones de escritura, es decir, insertOne, updateOne, updateMany, deleteOne, deleteMany, replaceOne.
  • writeConcern: Es un documento que expresa una preocupación de escritura. Si desea utilizar la preocupación de escritura predeterminada, elimine este parámetro, es un parámetro opcional.
  • ordenado: como se pueden realizar múltiples operaciones, cuando no se proporciona el orden (por defecto es verdadero), todas las operaciones se realizan una por una y si se dan como ordenados: falso, los resultados de la operación difieren ya que a veces insertOne será el primero seguido de el resto ya veces se sigue primero deleteOne y si es el caso, sin que exista ningún documento, no se puede completar. Por lo tanto, se debe tener en cuenta proporcionar el parámetro «ordenado» a falso, ya sea que se requiera o no.

Devolver:

Este método devolverá un documento que contiene un booleano reconocido como verdadero (si el problema de escritura está habilitado) o falso (si el problema de escritura está deshabilitado), cuenta para cada operación de escritura y una array que contiene un _id para todos y cada uno insertado con éxito. o documentos alterados.

Operaciones de escritura:

Ahora comprendamos las operaciones de escritura:

En las siguientes operaciones de escritura, estamos trabajando con:

Base de datos: estudiantesdb

Colección: estudiantes

Documento: tres documentos que contienen los datos de los alumnos.

1. Insertar una operación:

insertOne se utiliza para insertar un documento en la colección.

Sintaxis:

db.collection.bulkWrite([{insertarUno: {“documento”: <documento>}}])

Ejemplo:

Apliquemos la inserción de 2 documentos y verifiquemos su salida:

probar{

… db.estudiantes.bulkWrite([

… {insertOne:{“document”:{studentId:4, studentName:”GeekD”, studentAge:24}}},

… {insertOne:{“document”:{studentId:4, studentName:”GeekD”, studentAge:24}}}

… ]);

… }atrapar(e){

… imprimir(e);

… }

Como la consulta anterior contiene dos declaraciones «insertOne», se insertaron correctamente 2 documentos. Aquí, «insertedids» representa los valores que se insertaron. Ahora, en la ejecución de find(), podemos ver que los nuevos documentos se insertan perfectamente

La columna “_id” es la única para identificar el documento. En nuestro ejemplo, para _id, se elige aleatoriamente el valor. Podemos establecer explícitamente el valor de _id en 1, 2, etc., la columna _id se comporta como el concepto de clave principal, por lo que no podemos insertar filas duplicadas.

2. Operación updateOne y updateMany:

updateOne se usa para actualizar un documento en la colección.

Sintaxis:

db.colección.bulkWrite([{updateOne: 

{“filtro”: <documento>,

“actualizar”:<documento>,

“upsert”:<booleano>,

“recopilación”:<documento>,

“arrayFilters”:[<filtrodocumento1>, <filtrodocumento2>,..]

“pista”:<documento|string>

}

}])

Ejemplo:

Necesitamos proporcionar una condición de filtro válida, es decir, debemos verificar las columnas correctamente (mongodb distingue entre mayúsculas y minúsculas) y proporcionar las columnas que se actualizarán.

try {
  db.students.bulkWrite([
     { updateOne : {
        "filter" : { "studentId" : 2 }, 
        "update" : { $set : { "studentName" : "GeekyBest" } }
     } }
  ]);
} catch (e) {
  print(e);
} 

Aquí, primero «filtró» para «studentId = 2» y, si está presente, actualizó el «studentName» a «GeekyBest» usando «updateOne». Si varios documentos coinciden con la filtración dada, entonces «updateOne» actualiza el primer documento que coincide con la condición dada en la colección. Por lo tanto, en el proceso anterior, para un documento, se realiza la actualización. «studentId» y «studentid» se tratan de manera diferente porque mongodb distingue entre mayúsculas y minúsculas.

updateMany se usa para actualizar todos los documentos que coinciden con la condición dada en la colección.

Sintaxis:

db.colección.bulkWrite([{actualizarmuchos: 

{“filtro”: <documento>,

“actualizar”:<documento>,

“upsert”:<booleano>,

“recopilación”:<documento>,

“arrayFilters”:[<filtrodocumento1>, <filtrodocumento2>,..]

“pista”:<documento|string>

}

}])

Ejemplo:

try {
  db.students.bulkWrite([
     { updateMany : {
        "filter" : { "studentId" : 4 },
        "update" : { $set : { "studentName" : "GeeksForGeeksbest" } }
     } }
  ]);
} catch (e) {
  print(e);
}   

«matchedCount» representa cuántos documentos coincidieron y muestra 1 porque 1 documento coincidió con la condición filtrada y, por lo tanto, el documento coincidente «studentName» cambió.

3. Reemplazo de una operación:

replaceOne reemplaza un solo documento de acuerdo con la coincidencia que se proporciona en el filtro. Incluso cuando coinciden varios documentos, replaceOne siempre reemplazará el primer documento coincidente.

Sintaxis:

db.colección.bulkWrite([{replaceOne : 

{“filtro”: <documento>,

“reemplazo”:<documento>,

“upsert”:<booleano>,

“recopilación”:<documento>,

“pista”:<documento|string>

}

}])

Ejemplo:

try {
  db.students.bulkWrite([
     { replaceOne : {
        "filter" : { "studentId" : 3 },
        "replacement" : { "studentId" : 30, "studentName" : "BestGeek" }
     } }    
  ]);
} catch (e) {
  print(e);
}

En el ejemplo anterior, verificamos «studentId = 3» y un documento coincide con el filtro dado y se realizan los siguientes reemplazos, es decir, «studentId = 30 y studentName = BestGeek» son los reemplazos realizados y también se reemplazan.

4. Operación deleteOne y deleteMany:

deleteOne elimina un solo documento de acuerdo con la coincidencia que se proporciona en el filtro. Incluso cuando coinciden varios documentos, deleteOne eliminará siempre el primer documento coincidente.

Sintaxis:

db.colección.bulkWrite([{deleteOne : 

{“filtro”: <documento>,

“recopilación”:<documento>

}

}])

Ejemplo:

try {
  db.students.bulkWrite([
     { deleteOne : { "filter" : { "studentId" : 30} } }  
  ]);
} catch (e) {
  print(e);
}

Aquí, «deleteone» eliminará un documento que coincida con el filtro dado (es decir, «studentId»: 30)

deleteMany eliminará todos los documentos que coincidan. Por lo tanto, depende del requisito, necesitamos ver si podemos optar por deleteMany o no. En el tipo de entorno de producción, la eliminación tiene un alto costo, no podemos revocarla y, por lo tanto, debemos tener mucho cuidado al hacerlo.

Sintaxis:

db.colección.bulkWrite([{deleteMany : 

{“filtro”: <documento>,

“recopilación”:<documento>

}

}])

Ejemplo:

try {
  db.students.bulkWrite([
     { deleteMany : { "filter" : { "studentAge" : 20} } }  
  ]);
} catch (e) {
  print(e);
}

 Aquí, «deleteMany» eliminará aquellos documentos que coincidan con el filtro dado (es decir, «studentAge»: 20)

Ejemplos:

En los siguientes ejemplos, estamos trabajando con:

Base de datos: estudiantesdb

Colección: estudiantes

Documento: cuatro documentos que contienen los datos de los alumnos.

Escritura masiva desordenada:

Aquí, el método bulkWrite ejecuta varias operaciones desordenadas porque el valor del parámetro ordenado se establece en falso.

try {
  db.students.bulkWrite([
     {insertOne:{"document":{studentId:5, studentName:"GeekE", studentAge:24}}},
     { updateOne : {
        "filter" : { "studentId" : 2 }, 
        "update" : { $set : { "studentName" : "GeekyBest" } }
     } },
     { deleteMany : { "filter" : { "studentAge" : 20} } }, 
     { replaceOne : {
        "filter" : { "studentId" : 3 },
        "replacement" : { "studentId" : 30, "studentName" : "BestGeek" }
     } }  
  ],{ ordered : false });
} catch (e) {
  print(e);
}

Pedido a granelEscribir:

Si el valor del parámetro ordenado se establece en verdadero, a partir de insertOne, todas las operaciones se ejecutan una por una. Es decir, BulkWrite comenzará a ejecutarse desde insertOne, updateOne, updateMany, replaceOne, deleteOne y finalmente deleteMany. La opción predeterminada para «pedido» es «verdadero». Pero si se establece en «falso» según sea necesario, los resultados pueden variar de vez en cuando. es decir, no se puede definir el orden de ejecución y, por lo tanto, a veces se resolverá deleteOne/deleteMany y luego insertarOne/updateOne o el resto.

try {
  db.students.bulkWrite([
     {insertOne:{"document":{studentId:5, studentName:"GeekE", studentAge:24}}},
     { updateOne : {
        "filter" : { "studentId" : 2 }, 
        "update" : { $set : { "studentName" : "GeekyBest" } }
     } },
     { deleteMany : { "filter" : { "studentAge" : 20} } }, 
     { replaceOne : {
        "filter" : { "studentId" : 3 },
        "replacement" : { "studentId" : 40, "studentName" : "Geek11" }
     } }  
  ],{ ordered : true });
} catch (e) {
  print(e);
}

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *