Upsert en MongoDB

En MongoDB, upsert es una opción que se usa para la operación de actualización, por ejemplo, update(), findAndModify(), etc. O, en otras palabras, upsert es una combinación de update e insert (update + insert = upsert). Si el valor de esta opción se establece en verdadero y el documento o los documentos encontrados coinciden con la consulta especificada, la operación de actualización actualizará el documento o los documentos coincidentes. O si el valor de esta opción se establece en verdadero y ningún documento o documentos coinciden con el documento especificado, entonces esta opción inserta un nuevo documento en la colección y este nuevo documento tiene los campos que se indican en la operación. De forma predeterminada, el valor de la opción upsert es falso. Si el valor de upsert en una colección fragmentada es verdadero, debe incluir la clave de fragmento completa en el filtro. 

Sintaxis:

upsert: <booleano>

El valor de la opción upsert es verdadero o falso.

Ahora aprenderemos el uso de la opción upsert:

Upsert con el método findAndModify():

Podemos usar la opción upsert con el método findAndModify(). En este método, el valor predeterminado de esta opción es falso. Si establecemos que el valor de esta opción es verdadero, entonces el método realiza una de las siguientes operaciones:

  • Si se encuentra un documento o documentos que coinciden con los criterios de consulta dados, el método findAndModify() actualiza el documento o los documentos.
  • Si ningún documento coincide con los criterios de consulta dados, el método findAndModify() inserta un nuevo documento en la colección.

Sintaxis:

db.Collection_name.findAndModify(

{

    criterio_selección:<documento>,

    ordenar: <documento>,

    eliminar: <booleano>,

    actualizar: <documento>,

    nuevo: <booleano>,

    campos: <documento>,

    upsert: <booleano>,

    bypassDocumentValidation: <booleano>,

    escribirPreocupación: <documento>,

    intercalación: <documento>,

    arrayFilters: [ <filtrodocumento1>, … ]

})

Por ejemplo:

En este ejemplo estamos trabajando con 

Base de datos: gfg

Colección: empleado

Base de datos: tres documentos que contienen detalles de los empleados

Ahora vamos a insertar un nuevo documento en la colección de empleados estableciendo el valor de la opción upsert en verdadero.

 db.employee.findAndModify({query:{name:"Ram"}, 
                            update:{$set:{department:"Development"}},
                            upsert:true})

Aquí, ningún documento coincide con el nombre «Ram», por lo que el método findAndModify() inserta un nuevo documento que contiene dos campos (es decir, nombre: «Ram» y departamento: «Desarrollo») porque el valor de la opción upsert se establece en verdadero.

Upsert con el método update():

Podemos usar la opción upsert con el método update(). En este método, el valor predeterminado de esta opción es falso. Si establecemos que el valor de esta opción es verdadero, entonces el método realiza una de las siguientes operaciones:

  • Si se encuentra un documento o documentos que coinciden con los criterios de consulta dados, el método update() actualiza el documento o los documentos.
  • Si ningún documento coincide con los criterios de consulta dados, el método update() inserta un nuevo documento en la colección.

Nota: Para evitar que MongoDB inserte el mismo documento más de una vez, cree un índice único en el campo de nombre. Con un índice único, si varios documentos desean la misma actualización con upsert: true, solo una operación de actualización inserta correctamente un nuevo documento.

Sintaxis:

db.Collection_name.update({Selection_criteria}, {$set:{Update_data}}, {

     upsert: <booleano>,

     multi: <booleano>,

     escribirPreocupación: <documento>,

     intercalación: <documento>,

     arrayFilters: [ <filtrodocumento1>, … ],

     pista: <documento|string>        

   })

Por ejemplo:

En este ejemplo, estamos trabajando con 

Base de datos: gfg

Colección: empleado

Base de datos: tres documentos que contienen detalles de los empleados

Ahora vamos a insertar un nuevo documento en la colección de empleados estableciendo el valor de la opción upsert en verdadero.

db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})

Aquí, ningún documento coincide con el nombre «Priya», por lo que el método de actualización() inserta un nuevo documento que contiene dos campos (es decir, nombre: «Priya» y departamento: «HR») porque el valor de la opción upsert se establece en verdadero.

Upsert con expresiones de operador:

Si ningún documento coincide con el filtro de la colección dada y el parámetro de actualización es un documento que contiene operadores de actualización, también el valor de la opción upsert se establece en verdadero, entonces la operación de actualización crea nuevos documentos a partir de las cláusulas de igualdad en el parámetro de consulta dado y aplica las expresiones del parámetro de actualización. O, en otras palabras, cuando el valor de la opción upsert es verdadero y ningún documento coincide con el filtro dado, la operación de actualización inserta un nuevo documento en la colección dada, y los campos insertados en este nuevo documento son los campos que se especifican en la consulta. y actualizar documentos. 

Ejemplo:

En este ejemplo, estamos trabajando con 

Base de datos: gfg

Colección: ejemplo

Base de datos: cinco documentos que contienen detalles de los estudiantes

Ahora vamos a insertar un nuevo documento en la colección de ejemplo estableciendo el valor de la opción upsert en verdadero.

db.example.update({Name: "Rekha"}, // Query parameter  
                  {$set: {Phone: '7841235468 '}, // Update document
                   $setOnInsert: {Gender: 'Female'}},
                  {upsert: true})

Aquí, el método update() crea un nuevo documento con el campo «Nombre: Rekha» a partir de la condición de consulta y luego aplica las operaciones $set y $setOnInsert a este documento.

Upsert con documento de reemplazo:

Si ningún documento coincide con el filtro de la colección dada y el parámetro de actualización contiene un documento de reemplazo, también el valor de upsert document se establece en verdadero, la operación de actualización inserta un nuevo documento en la colección y los campos insertados en este nuevo documento son los campos que se especifican en el documento de reemplazo. Aquí, si el documento de reemplazo contiene un campo _id, entonces MongoDB no crea un nuevo campo _id para el nuevo documento. O si el documento de reemplazo no contiene un campo _id, entonces MongoDB crea un nuevo campo _id para el nuevo documento. 

Nota: No puede especificar diferentes valores de campo _id en el parámetro de consulta y el documento de reemplazo. Si lo hace, obtendrá errores.

Ejemplo:

En este ejemplo, estamos trabajando con 

Base de datos: gfg

Colección: ejemplo

Base de datos: cuatro documentos que contienen detalles de los estudiantes

Ahora vamos a insertar un nuevo documento en la colección de ejemplo estableciendo el valor de la opción upsert en verdadero.

db.example.update({Name:"Hema"}, // Query parameter
                  {Name:"Hema", Phone:8332564578}, // Replacement document
                  {upsert:true})

Upsert con tubería de agregación:

La canalización puede tener de 1 a n número de etapas

Si ningún documento coincide con el filtro dado y el parámetro de actualización contiene canalización de agregación, también el valor de la opción upsert se establece en verdadero, entonces la operación de actualización inserta un nuevo documento en la colección. Este nuevo documento se crea a partir de la cláusula de igualdad presente en el parámetro de consulta y luego aplica la canalización al documento para crear el documento a insertar.

Ejemplo:

En este ejemplo, estamos trabajando con 

Base de datos: gfg

Colección: empleado

Base de datos: tres documentos que contienen detalles de los empleados

Ahora vamos a insertar un nuevo documento en la colección de empleados estableciendo el valor de la opción upsert en verdadero.

db.employee.update({nombre:”Ram”}, [{$set: {departamento: “HR”, edad:30}}],{upsert:true})

Upsert con consulta punteada _id:

Hasta ahora, hemos estudiado que el método update() puede modificar los datos de la colección en función de la consulta y, si no se encuentra ningún documento coincidente con la ayuda de la opción upsert, se puede agregar un nuevo campo a la colección. Pero upsert con una consulta _id punteada es una excepción y si intenta insertar un documento de esta manera, MongoDB le mostrará un error.

Ejemplo:

Considere la siguiente operación de actualización. Dado que la operación de actualización especifica upsert:true y la consulta especifica condiciones en el campo _id utilizando la notación de puntos, la actualización generará un error al construir el documento para insertar.

db.employee.update({“_id.name”:”Roma”, “_id.uid”:0},{edad:20}, {upsert:true})

 

Publicación traducida automáticamente

Artículo escrito por code_blooded7 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 *