En MongoDB podemos actualizar documentos a través de dos métodos los cuales son update() y save().
El método update() lo que hace es desplazar los valores en un documento existente, mientras que save() reemplaza el documento existente con el que le pasamos por parámetro. Veamos cómo hacerlo.
Para nuestros ejemplos utilizaremos una collection la cual llamaremos libros, en este documento tenemos el nombre del libro, el autor, número (que refiere a la existencia de libros en nuestra biblioteca), unidad(puede ser cientos, miles, millones, etc), idioma y primera edición. Cabe resaltar que estos datos no son reales.
db.libros.find().pretty()
{
"_id" : ObjectId(“5920adccfae8f956c5f057f2”),
“nombre” : “El Hobbit”,
“autor” : “J.R.R Tolkien”,
“numero” : 100,
“unidad” : “millones”,
“idioma” : “ingles”,
“primera_edicion” : 1937
}
{
"_id" : ObjectId(“5920ae44fae8f956c5f057f3”),
“nombre” : “El Señor de los Anillo”,
“autor” : “J.R.R Tolkien”,
“numero” : 150,
“unidad” : “millones”,
“idioma” : “ingles”,
“primera_edicion” : 1954
}
{
"_id" : ObjectId(“5920aeb2fae8f956c5f057f4”),
“nombre” : “El Principito”,
“autor” : “Antonie de Saint-Exepéry”,
“numero” : 140,
“unidad” : “millones”,
“idioma” : “Frances”,
“primera_edicion” : 1943
}
{
"_id" : ObjectId(“5920af19fae8f956c5f057f5”),
“nombre” : “Historias de dos Ciudades”,
“autor” : “Charles Dicken”,
“numero” : 200,
“unidad” : “millones”,
“idioma” : “ingles”,
“primera_edicion” : 1859
}
Empezaremos utilizando el método save().
Creamos una variable y le asignamos como valor una consulta.
cambio = db.libros.findOne({ nombre:“El Principito”})
{
"_id" : ObjectId(“5920aeb2fae8f956c5f057f4”),
“nombre” : “El Principito”,
“autor” : “Antonie de Saint-Exepéry”,
“numero” : 140,
“unidad” : “millones”,
“idioma” : “Frances”,
“primera_edicion” : 1943
}
Como podemos ver en el ejemplo anterior tenemos una condición la cual trae el nombre del libro. Si ejecutamos la variable cambio nos devuelve los datos del documento que cumple con la condición - nombre: “El Principito” -.
Teniendo en cuenta que uno de sus campos se llama numero sobre el cual vamos a realizar la actualización escribimos
cambio.numero = 145
Si volvemos a ejecutar la variable cambio veremos el cambio en el campo numero, pero, no así en la colección de nuestra base de datos. Para guardar nuestro cambio nos ayudará el método save() de la siguiente manera:
db.libros.save(cambio)
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) // MongoDB informa una modificación
Cuando ejecutemos nuevamente la consulta db.libros.find(), el registro que habíamos llamado con la condición nombre: “El principito” su campo numero habrá cambiado de 140 a 145
Utilizando el método update()
Creamos una variable y le asignamos como valor una consulta.
cambio = db.libros.findOne({ nombre:“El Principito”})
{
"_id" : ObjectId(“5920aeb2fae8f956c5f057f4”),
“nombre” : “El Principito”,
“autor” : “Antonie de Saint-Exepéry”,
“numero” : 145,
“unidad” : “millones”,
“idioma” : “Frances”,
“primera_edicion” : 1943
}
De la misma manera que con el método save(), esta variable contiene el documento cuya condición es que el campo nombre tenga el valor “El Principito”, ahora actualizaremos el campo numero a 140 de la siguiente forma:
cambio.numero = 140
Si ejecutamos la variable cambio veremos el cambio, pero, aún no la hemos llevado a la colección, para eso utilizaremos el método update().
db.libros.update({numero:145}, cambio)
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 }) // MongoDB informa una modificación
El método update recibe el campo que se quiere actualizar con su contenido o valor actual, luego la variable, para nuestro ejemplo la variable cambio que contiene la actualización.
Cuando ejecutemos nuevamente la consulta db.libros.find(), el registro que habíamos llamado con la condición nombre: “El principito” su campo numero habrá cambiado de 145 a 140
Para nuestro tercer ejemplo utilizaremos el comando $set, actualizaremos el campo unidad de todas los documentos que existen en nuestra colección, veamos cómo hacerlo
db.libros.update({unidad: “millones”}, {$set:{unidad: “miles”} }, {multi: true})
WriteResult({ “nMatched” : 9, “nUpserted” : 0, “nModified” : 9 }) // MongoDB informa nueve modificaciones
Nuestro ejemplo utiliza nuevamente el método update(), sin embargo usa tres parámetros, el primer parámetro sirve como condición, el siguiente es el o los nuevos valores y por último le decimos que a todos los documentos especificando la palabra multi con su valor true, de lo contrario solo actualizará el primer documento que encuentre.
espero haber sido claro hasta la próxima.