Upsert en MongoDB
-
la consulta
upsert
en MongoDB -
Utilice la consulta
upsert
con el métodoupdate()
-
Utilice la consulta
upsert
con el métodofindAndModify()
-
Otros métodos compatibles con
upsert
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:
actualizarUno()
reemplazarUno()
Puede visitar este blog para saber más. Además, aquí está la documentación oficial de MongoDB.