Quantcast
Channel: Planeta Linux Venezuela
Viewing all articles
Browse latest Browse all 1457

Yohan Graterol: CRUD en #MongoDB (Parte 3: Actualización / Update)

$
0
0

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!


Viewing all articles
Browse latest Browse all 1457

Latest Images

Trending Articles