Insertar registros si no existe en MongoDB
-
Upserten MongoDB -
Upsertcon el métodofindAndModify()en MongoDB -
Upsertcon el métodoupdate()en MongoDB -
Upsertcon expresiones de operador en MongoDB -
Upsertcon documento de reemplazo en MongoDB -
Upsertcon tubería de agregación en MongoDB -
Upsertcon consulta_idpunteada 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.
- Si un documento o los documentos 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, 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.
.webp)
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.
- 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 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.
.webp)
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.

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})

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})

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})

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