Comenzamos la tercera parte de Mongodb, como hemos visto hasta el momento ya sabemos que es, como funciona, su sintaxis, hemos realizado ademas algunas consultas, insertado y eliminado datos. En esta oportunidad vamos a profundizar algo más en sentencias, para poder implementarlas en un futuro en alguna aplicación real.
Primeramente, procederemos a inicializar mongodb de la forma que ya conocemos:
service mongod start mongo
[wp-svg-icons icon=»embed» wrap=»i»] Variables:
Ahora que estamos listos, veremos que en Mongodb es posible guardar nuestras consultas en una varible, para ello tomaremos como punto de partida la base de datos de clientes que creamos en el tutorial pasado, veamos un ejemplo acerca de esto.
Crearemos una variable test la cual va a contener un cliente, para obtener un cliente recordemos que podemos utilizar findOne().
var test = db.clientes.findOne()
Una vez que guardamos a ese cliente en la variable test, podemos imprimir su contenido en pantalla simplemente ejecutando la variable «test» y obtendremos algo como esto:
test{ "_id" : ObjectId("594d089576dd7cca79536b2b"), "Nombre" : "Carlos", "Apellidos" : "Garcia Perez", "Edad" : 36}
Una variante a esto es simplemente escribir la variable sin el prefijo var previo.
¿Cual es la diferencia?, simplemente que nos imprime lo que guardo luego de ejecutarla:
test_dos = db.clientes.find({Nombre: "Valentina"})
Al ejecutar esta sentencia, nos devolvera lo siguiente:
test_dos = db.clientes.find({Nombre: "Valentina"}){ "_id" : ObjectId("594d08d976dd7cca79536b2c"), "Nombre" : "Valentina", "Apellidos" : "Garcia Perez", "Edad" : 20, "Telefono" : 123456789 }
Como vemos, obtuvimos el cliente de nombre «Valentina» y lo guardamos en la variable test_dos.
Ahora implementemos ejemplo algo más completo, busquemos guardar en una variable, el nombre y edad de un cliente y luego insertar esta variable en nuestra base de datos:
Juan = {Nombre : "Juan", Apellidos : "Rodriguez", Edad : 22, Telefono : 1234116789}
Aqui hemos creado nuestro cliente Juan, y lo almacenamos en una variable, ahora debemos insertarlo a la base de datos:
db.clientes.insert(Juan)
Si fue correctamente insertado debe devolver lo siguiente:
WriteResult({ "nInserted" : 1 })
Para confirmar hagamos una búsqueda de todos los usuarios:
db.clientes.find()
{ "_id" : ObjectId("594d089576dd7cca79536b2b"), "Nombre" : "Carlos", "Apellidos" : "Garcia Perez", "Edad" : 36 } { "_id" : ObjectId("594d08d976dd7cca79536b2c"), "Nombre" : "Valentina", "Apellidos" : "Garcia Perez", "Edad" : 20, "Telefono" : 123456789 } { "_id" : "10000000L", "Nombre" : "Pedro", "Apellidos" : "Garcia Perez", "antiguedad" : 3, "Direccion" : { "city" : "mad", "country" : "es" }, "Servicios" : [ "Hosting", "Sitio Web" ] } { "_id" : "20000000L", "Nombre" : "Eduardo", "Apellidos" : "Lopez Sanches", "antiguedad" : 3, "Direccion" : { "city" : "mad", "country" : "es" }, "Servicios" : [ "Hosting", "Administración" ] } { "_id" : ObjectId("595b79e3c19cb31f34a69130"), "Nombre" : "Juan", "Apellidos" : "Rodriguez", "Edad" : 22, "Telefono" : 1234116789 }
Tal como indica el ultimo registro Juan ahora pertenece a nuestra base de datos en Mongodb
Hasta el momento hemos implementado filtros del tipo «igual a» para realizar las búsquedas, a continuación veremos la sintaxis correcta para filtrar una búsqueda por elementos del tipo «no igual a».
db.clientes.find( {Nombre:{$ne:22}} )
En este caso los registros obtenidos serán todos excepto el de id «595b79e3c19cb31f34a69130» es decir Juan.
[wp-svg-icons icon=»pencil-2″ wrap=»i»] Actualizar datos desde una variable:
Usemos la variable test que tenemos guardada, en esta variable, intentemos modificar el atributo nombre.
Primero recordemos el nombre que tiene guardado esta variable:
test{ "_id" : ObjectId("594d089576dd7cca79536b2b"), "Nombre" : "Carlos", "Apellidos" : "Garcia Perez", "Edad" : 36}
Ahora modifiquemos este nombre suponiendo un caso en el que hubo un error al ingresarlo:
test.Nombre = "Cambio de Nombre"
Para poder reflejar este cambio en el registro de la base de datos, debemos salvar los cambios, ¿como realizamos esto?
db.clientes.save(test)
¿Como se logro realizar el cambio?, .save busca en la variable que le hemos pasado, en este caso test, si existe un id, al encontrar un id lo compara con los registros de la base de datos, en caso que exista actualiza el registro con los campos guardados en la variable.
Que atributos mostrar:
Suele ser un poco molesto en algunos casos o innecesario en otros, mostrar todos los campos de un registro, pero podemos elegir que mostrar y que no.
Mostremos el nombre y ocultemos el resto de los campos:
db.clientes.find({},{Nombre:1})
{ "_id" : ObjectId("594d089576dd7cca79536b2b"), "Nombre" : "Carlos" }{ "_id" : ObjectId("594d08d976dd7cca79536b2c"), "Nombre" : "Valentina" }
[wp-svg-icons icon=»calculate» wrap=»i»] Operadores:
En Mongodb podemos trabajar con operadores directamnte sobre nuestra sintaxis de consulta, por ejemplo en caso que requieramos un registro que coincida con «x» valor o tambien comparaciones.
Estos son los operadores que podemos utilizar:
$gt > greater than / mayor que $gte >= greater than equals / mayor o igual que $lt < less than / menor que $lte =< less than equals / menor o igual que
Para ver un ejemplo realizaremos la búsqueda de un cliente menor a 25 años
db.clientes.find({},{Edad: {$lt:25}})
También podemos expresar rangos concatenando de la siguiente manera:
db.clientes.find({},{Edad: {$gt:20, $lt:25}})
Podemos ademas hacer un conteo de los registros que tenemos ingresados, utilizando .count()
db.clientes.find().count()
[wp-svg-icons icon=»loop» wrap=»i»] Bucles
Para trabajar con blucles de interacción podemos intentar ingresar a una base de datos «test» un registro valor cuyos datos sean del 0 al 50.
for(i=0; i<100; i++){ db.test.insert( { valor : i } ) }
Para verificar si efectivamente se guardaron los registros, podemos hacer un find de la tabla test, lo que nos arrojara lo siguiente:
{ «_id» : ObjectId(«594d089576dd7cca79536b2b»), «valor» : 0}
{ «_id» : ObjectId(«594d089576dd7cca79536b2c»), «valor» : 1}
{ «_id» : ObjectId(«594d089576dd7cca79536b2d»), «valor» : 2}
{ «_id» : ObjectId(«594d089576dd7cca79536b2e»), «valor» : 3} …
[wp-svg-icons icon=»code» wrap=»i»] Expresiones regulares:
Para utilizar busquedas mediante expresiones regulares, podemos realizar lo siguiente:
Suponiendo que ya agregamos algunos correos a una base de datos «correos», podemos realizar una busqueda de todos aquellos que incluyan un «@».
db.correos.find({ correo : /@/ })
En el caso que ademas queramos obtener los correos que terminen en «.com», podemos realizar lo siguiente:
db.correos.find({ correo : /.com$/ })
Todos aquellos que comiencen con uan «palabra»:
db.correos.find({ correo : /^palabra/ })
CONCLUSIÓN
Si llegaste hasta esta, la tercer parte de este tutorial de MongoDB, puedes estar seguro que tienes las herramientas suficientes para desarrollar cualquier aplicación donde se requiera.
Conoces su instalación, estructura, manejo, y demás funciones de esta excelente opción NoSQL. No puedes perderte la cuarta y ultima parte de MongoDB, donde verificaremos todos nuestros conocimientos, haremos un breve resumen de lo aprendido hasta ahora y agregaremos algunas funciones o tips para dominar a la perfección esta herramienta.