Insertar registros si no existe en MongoDB

Tahseen Tauseef 15 febrero 2024
  1. Upsert en MongoDB
  2. Upsert con el método findAndModify() en MongoDB
  3. Upsert con el método update() en MongoDB
  4. Upsert con expresiones de operador en MongoDB
  5. Upsert con documento de reemplazo en MongoDB
  6. Upsert con tubería de agregación en MongoDB
  7. Upsert con consulta _id punteada en MongoDB
Insertar registros si no existe en MongoDB

En este artículo, se analiza brevemente la inserción de registros en las colecciones de MongoDB. También se explican diferentes formas de insertar estos registros.

Además, se cubren brevemente Upsert y $setOninsert.

Upsert en MongoDB

Upsert es una opción de MongoDB que se utiliza para operaciones de actualización como update(), findAndModify(), etc. O, dicho de otro modo, upsert es el resultado de combinar actualizar e insertar (update + insert = upsert).

Si el valor de la opción es true y se identifica el documento o documentos que coinciden con la consulta especificada, la acción de actualización actualizará el documento o documentos coincidentes. Alternativamente, suponga que el valor de esta opción es “true”, y ningún documento o documentos coinciden con el documento proporcionado.

En ese caso, esta opción crea un nuevo documento en la colección con los campos especificados en la operación. El valor de la opción de operación upsert es false por defecto.

Si el valor upsert en una colección compartida es true, debe incluir la clave compartida completa en el filtro.

Sintaxis:

upsert: <boolean>

El valor de la opción upsert es true o false.

Ahora aprenderá el uso de la opción upsert.

Upsert con el método findAndModify() en MongoDB

Con la función findAndModify(), puede utilizar la opción upsert. El valor por defecto de esta opción en este método es false.

Si establece el valor de esta opción en true, el procedimiento realizará una de las siguientes operaciones.

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

Sintaxis:

db.Collection_name.findAndModify(
{
selection_criteria:<document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>,  ]
})

Al ajustar el valor de la opción upsert a true, ahora insertará un nuevo documento en la colección empleado.

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

Aquí el valor de la opción upsert se establece en true; el método findAndModify() inserta un nuevo documento con dos campos (nombre: "Ram" y departamento: "Desarrollo") porque ningún documento coincide con el nombre, Ram.

método buscar y modificar

Upsert con el método update() en MongoDB

Con la función update(), puede utilizar la opción upsert. El valor por defecto de este parámetro en esta función es false.

Si establece el valor de esta opción en true, el procedimiento realizará una de las siguientes acciones.

  1. 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.
  2. Si ningún documento cumple con los criterios de consulta especificados, la función actualizar() agrega un nuevo documento a la colección.

Cree un índice único en el campo de nombre para evitar que MongoDB agregue el mismo documento más de una vez. Por ejemplo, si muchos documentos exigen la misma actualización con upsert: true, solo una acción de actualización inserta con éxito un nuevo documento con un índice único.

Sintaxis:

db.Collection_name.update({Sele ction_ criteria}, {$set:{Update_data}}, {
upsert: <boo. lean >,
multi: <boo. lean>,
writeConcern: < document>,
collation: < document>,
arrayFilters: [ <filter document1>,  ],
hint:  <document|string>
})

Al cambiar el valor de la opción upsert a true, insertará un nuevo documento en la colección empleado.

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

Debido a que el valor de la opción upsert se establece en true, la función update() inserta un nuevo documento con dos campos (name: "Priya" y department: "HR") porque ningún documento coincide con el nombre Priya.

método de actualización

Upsert con expresiones de operador en MongoDB

Supongamos que ningún documento de la colección dada coincide con el filtro. En ese caso, el parámetro actualizar es un documento con operadores actualizar.

El valor de la opción upsert es true; la operación actualizar crea nuevos documentos basados en las cláusulas de igualdad del parámetro consulta dado y aplica las expresiones del parámetro actualizar.

O dicho de otro modo, cuando la opción upsert es true y ningún documento se ajusta al filtro proporcionado, la operación update crea un nuevo documento en la colección dada, con los campos especificados en la consulta y Documentos de actualización.

Ejemplo:

Al cambiar el valor de la opción upsert a true, colocará un nuevo documento en la colección example.

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

La función update() produce un nuevo documento con el campo de la condición de consulta "Nombre: Rekha" y aplica las acciones $set y $setOnInsert.

expresión de operador

Upsert con documento de reemplazo en MongoDB

Supongamos que ningún documento de la colección proporcionada cumple con el filtro y el parámetro actualizar incluye un documento de reemplazo, y el valor del documento upsert se establece en true. La acción actualizar inserta un nuevo documento en la colección, con los campos especificados en el documento de reemplazo.

MongoDB no genera un campo _id único para el nuevo documento si el documento de reemplazo incluye un campo _id. Alternativamente, si el documento de reemplazo carece de un campo _id, MongoDB crea un nuevo campo _id para el nuevo documento.

Tenga en cuenta que no se permiten valores de campo _id distintos en el parámetro de consulta y el documento de reemplazo. Si lo hace, encontrará problemas.

Ejemplo:

Al ajustar el valor de la opción upsert a true, ahora insertará un nuevo documento en la colección example.

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

documento de reemplazo

Upsert con tubería de agregación en MongoDB

La canalización de agregación es una canalización de varias etapas en la que los documentos se aceptan como entrada y se producen como una colección de documentos resultante.

Los documentos resultantes se toman como entrada y se crean en el siguiente paso (si está disponible) hasta la última etapa. El número de etapas en la tubería puede variar de “uno” a n.

Supongamos que ningún documento se ajusta al filtro especificado y el parámetro actualizar incluye una canalización de agregación, y el valor de la opción upsert se establece en true. En ese caso, la operación de actualización insertará un nuevo documento en la colección.

Este nuevo documento se forma utilizando la cláusula de igualdad en el parámetro query, y luego se le aplica la canalización para crear el documento a insertar.

Ejemplo:

Al ajustar el valor de la opción upsert a true, ahora insertará un nuevo documento en la colección empleado.

db.employee.update({name:"Ram"}, [{$set: {department: "HR", age:31}}],{upsert:true})

tubería de agregación

Upsert con consulta _id punteada en MongoDB

Ha visto cómo la función actualizar() puede cambiar los datos en una colección dependiendo de una consulta y cómo la opción upsert puede agregar un nuevo campo si no se encuentran documentos coincidentes.

Sin embargo, upsert con una consulta _id punteada es una excepción, e intentar insertar un documento de esta manera resultaría en un error de MongoDB.

Ilustración:

Eche un vistazo a la siguiente operación de actualización. La actualización fallará mientras se crea el documento para insertar, ya que la operación de actualización especifica upsert: true, y la consulta proporciona condiciones en el campo _id mediante la notación de puntos.

db.employee.update({"_id.name":"Roma", "_id.uid":0},{age:21}, {upsert:true})

consulta punteada

Entonces, este artículo discutió el problema de insertar registros en campos vacíos en MongoDB. Upsert se explica brevemente con diferentes escenarios.