Upsert en MongoDB

Shihab Sikder 20 junio 2023
  1. la consulta upsert en MongoDB
  2. Utilice la consulta upsert con el método update()
  3. Utilice la consulta upsert con el método findAndModify()
  4. Otros métodos compatibles con upsert
Upsert en MongoDB

En MongoDB, upsert combina los comandos update e insert. Se puede utilizar en las operaciones update() y findAndModify().

la consulta upsert en MongoDB

upsert toma un único parámetro booleano. Si se establece en VERDADERO y se encuentra un documento de consulta, actualizará el documento; si no lo encuentra, insertará un nuevo documento en la colección.

Sintaxis:

upsert: <boolean>

Utilice la consulta upsert con el método update()

Suponga que tiene el siguiente documento para el empleado. Para ver los documentos, escribirá el siguiente comando en Mongosh o MongoCLI (después de conectarse con éxito a la base de datos):

> db.employee.find().pretty()
{"_id":1,   "name":"Alice"}
{"_id":2,   "name":"Bob"}

Aquí, find() se usa para buscar documentos u objetos. También podemos pasarle parámetros.

Por ejemplo, si escribes find({"_id":1}), devolverá solo el objeto con un id de 1. pretty() es para imprimir la salida en un formato agradable.

Ahora, si intentas actualizar de la siguiente manera:

> db.employee.update({_id:5},{name: "Jhon"})
WriteResult({"nMatched": 0,  "nUpserted": 0, "nModified": 0})

Como podemos ver en WriteResult, no se actualizó ningún documento. Ahora, pruebe la opción upsert con el valor TRUE.

Supongamos que desea buscar un nombre y actualizarlo. Por ejemplo, desea actualizar todos los nombres Sam a Samuel usando la opción upsert.

La consulta será como la siguiente:

> db.employee.update({name:"Sam"},{name: "Samuel"})
WriteResult({
    "nMatched": 0,  
    "nUpserted": 1, 
    "nModified": 0,
    "_id": ObjectId("67874504aed8aee9986")
})
>

Aquí puedes ver que el valor alterado es 1. Debido a que no hay coincidencia para el nombre Sam, creó una entidad con un _id único para ella.

Ahora, si desea ver todas las entidades en empleado, puede ejecutar la siguiente consulta:

> db.employee.find().pretty()
{"_id":1,   "name":"Alice"}
{"_id":2,   "name":"Bob"}
{"_id":ObjectId("67874504aed8aee9986"),   "name":"Samuel"}
>

Utilice la consulta upsert con el método findAndModify()

Este método funciona igual que el método update(), pero findAndModify solo actualizará el primer objeto coincidente, mientras que update modifica todas las entidades coincidentes.

Supongamos que queremos agregar un nuevo campo donde el id es igual a 3. Escribiremos lo siguiente:

db.employee.findAndModify({query: {_id:3}, update:{$inc: {salary: 1500}}, upsert: true})
null
>

Devuelve nulo porque nunca existió.

Si vemos todas las entidades, podemos ver que se agrega un nuevo objeto a los documentos ya que upsert se estableció en TRUE. Agregó una nueva entidad con una identificación de 3 y un salario de 1500.

> db.employee.find().pretty()
{"_id":1,   "name":"Alice"}
{"_id":2,   "name":"Bob"}
{"_id":ObjectId("67874504aed8aee9986"),   "name":"Samuel"}
{"_id":5,   "salary":"1500"}

Otros métodos compatibles con upsert

También podemos usar la opción upsert en los siguientes métodos:

  1. actualizarUno()
  2. reemplazarUno()

Puede visitar este blog para saber más. Además, aquí está la documentación oficial de MongoDB.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website