CRUD en MongoDB (Parte 1: Inserción)
CRUD en MongoDB (Parte 2-1: Lectura / Find)
CRUD en MongoDB (Parte 2-2: Lectura / Find)
Update / Actualización
Siguiendo con los post sobre CRUD en MongoDB, hemos llegado a la parte de actualización de documentos, expondré los métodos mas comunes para la actualización de documentos dentro de MongoDB.
Actualización de un documento
Para actualizar un documento de MongoDB, se pueden aplicar varios métodos, uno de ellos es obteniendo el documento, modificándolo y luego editándolo; La sintaxis para editar documentos es db.coleccion.update(parametro_busqueda, documento_actualizado).
Veamos un ejemplo:
Primero ejecutemos este código para almacenar datos de prueba en la consola de MongoDB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >for(i = 1; i <= 10; i++){ ... db.actualizar.insert({campo1: i}); ... } > db.actualizar.find() {"_id" : ObjectId("5153c91d22b4cfc5f702dc4a"), "campo1" : 1} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4b"), "campo1" : 2} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4c"), "campo1" : 3} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4d"), "campo1" : 4} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4e"), "campo1" : 5} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4f"), "campo1" : 6} {"_id" : ObjectId("5153c91d22b4cfc5f702dc50"), "campo1" : 7} {"_id" : ObjectId("5153c91d22b4cfc5f702dc51"), "campo1" : 8} {"_id" : ObjectId("5153c91d22b4cfc5f702dc52"), "campo1" : 9} {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10} |
Ahora bien, editemos el documento con campo1 = 10, obteniéndolo y agregándole otra clave y valor, para luego almacenarlo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Buscamos el documento con findOne > documento = db.actualizar.findOne({campo1:10}) {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10} # Agregamos un nuevo valor, como si de un objeto se tratase > documento.nuevocampo = "hola mundo" hola mundo # Vemos si ciertamente se almaceno > documento { "_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10, "nuevocampo" : "hola mundo" } # Almacenamos el valor, con update, y el parametro de busqueda campo1 == 10 > db.actualizar.update({campo1: 10}, documento) > db.actualizar.find() {"_id" : ObjectId("5153c91d22b4cfc5f702dc4a"), "campo1" : 1} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4b"), "campo1" : 2} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4c"), "campo1" : 3} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4d"), "campo1" : 4} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4e"), "campo1" : 5} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4f"), "campo1" : 6} {"_id" : ObjectId("5153c91d22b4cfc5f702dc50"), "campo1" : 7} {"_id" : ObjectId("5153c91d22b4cfc5f702dc51"), "campo1" : 8} {"_id" : ObjectId("5153c91d22b4cfc5f702dc52"), "campo1" : 9} {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10, "nuevocampo" : "hola mundo"} |
Agregar nueva clave y valor con $set
Otro método interesante para actualizar es la actualización usando $set, que agrega un nuevo valor si no existe o lo actualiza si existe, la sintaxis es la siguiente: db.collecion.update(parametro_busqueda, {“$set”: {nueva_clave: nuevo_valor}})
Ejemplo:
Agregaremos una clave llamada “nuevocampo”, al documento con campo1 == 2.
1 2 3 4 5 6 7 8 9 10 11 12 | > db.actualizar.update({campo1: 2}, {"$set": {nuevocampo: 124}}) > db.actualizar.find() {"_id" : ObjectId("5153c91d22b4cfc5f702dc4c"), "campo1" : 3} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4d"), "campo1" : 4} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4e"), "campo1" : 5} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4f"), "campo1" : 6} {"_id" : ObjectId("5153c91d22b4cfc5f702dc50"), "campo1" : 7} {"_id" : ObjectId("5153c91d22b4cfc5f702dc51"), "campo1" : 8} {"_id" : ObjectId("5153c91d22b4cfc5f702dc52"), "campo1" : 9} {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4a"), "campo1" : 1} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4b"), "campo1" : 2, "nuevocampo" : 124} |
Ahora modifiquemos su valor a “nuevo”.
1 2 3 4 5 6 7 8 9 10 11 12 | > db.actualizar.update({campo1: 2}, {"$set": {nuevocampo: "nuevo"}}) > db.actualizar.find() {"_id" : ObjectId("5153c91d22b4cfc5f702dc4c"), "campo1" : 3} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4d"), "campo1" : 4} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4e"), "campo1" : 5} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4f"), "campo1" : 6} {"_id" : ObjectId("5153c91d22b4cfc5f702dc50"), "campo1" : 7} {"_id" : ObjectId("5153c91d22b4cfc5f702dc51"), "campo1" : 8} {"_id" : ObjectId("5153c91d22b4cfc5f702dc52"), "campo1" : 9} {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4a"), "campo1" : 1} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4b"), "campo1" : 2, "nuevocampo" : "nuevo"} |
Observamos que el valor ahora cambio a “nuevo”, si en algún momento editan y agregan nuevas claves a un documento y se va a la ultima posición es por el tamaño del mismo, MongoDB ordena por tamaño del documento y no de manera natural.
Eliminando claves con $unset
Si deseamos agregar una nueva clave/valor al documento, usamos $set, y si deseamos quitarla? Alli entra el comando $unset, para eliminar la clave junto a su valor, la sintaxis es la siguiente: db.coleccion.update(parametro_busqueda, {“$unset”: {campo: “”}}).
Ejemplo:
Eliminemos la clave “nuevocampo”.
1 2 3 4 5 6 7 8 9 10 11 12 | > db.actualizar.update({campo1: 2}, {"$unset": {nuevocampo: ""}}) > db.actualizar.find() {"_id" : ObjectId("5153c91d22b4cfc5f702dc4c"), "campo1" : 11} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4d"), "campo1" : 4} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4e"), "campo1" : 5} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4f"), "campo1" : 6} {"_id" : ObjectId("5153c91d22b4cfc5f702dc50"), "campo1" : 7} {"_id" : ObjectId("5153c91d22b4cfc5f702dc51"), "campo1" : 8} {"_id" : ObjectId("5153c91d22b4cfc5f702dc52"), "campo1" : 9} {"_id" : ObjectId("5153c91d22b4cfc5f702dc53"), "campo1" : 10} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4a"), "campo1" : 1} {"_id" : ObjectId("5153c91d22b4cfc5f702dc4b"), "campo1" : 2} |
Se observa que ya no aparece el campo “nuevocampo” en el documento con campo1 == 2
Finalizando
Ya se están culminando los post sobre CRUD el ultimo que queda es el de eliminar documentos, estaré publicándolo pronto.
Saludos!