Cargando



Guía de consultas para MongoDB

En este tutorial veremos una guía de cómo realizar consultas contra documentos dentro de MongoDB, logrando así un conocimiento lo suficientemente amplio como para definir si las Bases de Datos no relacionales se ajustan a nuestro esquema o si debemos pensar en otra solución.


ene 28 2015 01:52
Profesional
ene 28 2015 10:22
MongoDB es un manejador de Bases de Datos no relacionales, esto significa que su estructura y la forma en la que se comporta son muy diferentes a lo que conocemos como MySQL o PostgreSQL. Estas diferencias hacen que planear y ejecutar nuestra estructura de datos sean algo único, pero lo que más nos puede afectar inicialmente son las consultas.

Los datos ya no se manejan como tablas y registros, sino que son conocidos como colecciones de documentos, de esta forma desaparecen las relaciones entre tablas y surge una nueva oportunidad y es crear documentos con estructuras diferentes sin tener que definirlas previamente.

Entorno de pruebas - Instalación


Para poder ejecutar las diferentes consultas que veremos durante este tutorial vamos a necesitar establecer nuestro entorno de pruebas, con ello podremos aprender mientras hacemos los ejemplos, reforzando así todos los conceptos que puedan ser nuevos.

Opciones de instalación
Tenemos dos opciones, la primera es instalar MongoDB directamente en nuestro sistema y la segunda es utilizar la consola en línea que nos ofrece la página oficial, sea cual sea la opción elegida nos va a funcionar para este tutorial. Nuestra recomendación es que instalemos MongoDB, ya que de esta forma no dependeremos de conexión a Internet y la ejecución es mucho más rápida.


La instalación de este tutorial está hecha en Windows 7 pero dependiendo de nuestro sistema operativo podemos ir a mongodb.org y buscar la sección de descargas, dentro conseguiremos las diferentes versiones tanto para Linux como Mac o Solaris.

guia-consultas-mongodb.jpg

Una vez que descargamos e instalamos la versión correspondiente, debemos iniciar el daemon mongod, en el caso de Windows es mongod.exe, pero para que funcione adecuadamente debemos crear un directorio o carpeta de datos preferiblemente en una ruta que no necesite permisos de administrador y al iniciar mongod.exe le indicamos que debe tomarla. El comando de inicio es el siguiente:
$rutaMongodb/ mongod.ex - - dbpath “Unidad:\db\data”
Donde rutaMongodb es la carpeta donde hicimos la instalación y Unidad es la letra del disco duro donde se encuentra la ruta para acceder a db\data, si todo ha iniciado exitosamente veremos algo como lo siguiente:


guia-consultas-mongodb-2.jpg

En la pantalla anterior debemos localizar que diga waiting for connections, que es la señal que el servicio está corriendo adecuadamente. Una vez que el servidor este iniciado, ahora debemos abrir una nueva consola e ir nuevamente a la ruta de instalación de MongoDB, aquí ubicaremos el cliente el cual tiene como nombre mongo.exe, y al ejecutarlo inmediatamente buscará hacer conexión con nuestro servicio, esto lo podemos ver en la siguiente imagen.

guia-consultas-mongodb-3.jpg

En caso que decidamos ir por la versión en línea de la web oficial solo debemos acceder a la ruta try.mongodb.org y ahí nos encontraremos con una consola de MongoDB hecha en JavaScript, esto nos facilita nuestras tareas en casos donde no podemos hacer la instalación o simplemente para satisfacer nuestra curiosidad.

guia-consultas-mongodb-4.jpg

Entorno de pruebas – datos iniciales


Ya que tenemos nuestro manejador corriendo y podemos ingresar comandos, necesitamos una cantidad de datos de prueba que nos permitan evaluar las consultas, para iniciar les dejamos los siguientes registros que pueden copiar y pegar en su consola para que tengan algo dentro de la Base de Datos y así obtener resultados con los ejemplos que vienen posteriormente:
db.guiamongo.insert({"nombre": "Maria", "edad":"25", "genero":"Femenino", "pais":"Colombia" });db.guiamongo.insert({"nombre": "Pedro", "edad":"32", "genero":"Masculino", "pais":"Ecuador" });db.guiamongo.insert({"nombre": "Ramon", "edad":"18", "genero":"Masculino", "pais":"Honduras" });db.guiamongo.insert({"nombre": "John", "edad":"22", "genero":"Masculino", "pais":"Argentina" });db.guiamongo.insert({"nombre": "Rosa", "edad":"45", "genero":"Femenino", "pais":"Chile", "idiomas":["Esp", "Ing", "Fra"] });
Una vez insertados nuestros datos, ya tenemos el entorno de pruebas totalmente listo.

Consultar con find()


La herramienta principal para realizar las consultas en MongoDB es find(), con este simple comando podremos lograr ubicar de forma efectiva los documentos que necesitemos, recordemos que los documentos serán similares a los registros en otros manejadores de Base de Datos.

La forma más sencilla para utilizar find() es pasarle un array con las propiedades del documento que deseamos consultar y una vez con eso se hará el retorno de todo lo que cumpla con la condición, en el siguiente ejemplo vamos a ubicar a los documentos donde “genero” sea “Femenino”, para ello podemos utilizar el siguiente comando:
db.guiamongo.find({“genero”:”Femenino”});
El resultado de esta consulta debería ser algo como lo siguiente:


guia-consultas-mongodb-5.jpg

Vemos como efectivamente MongoDB nos retorna los dos registros que insertamos en nuestro entorno de pruebas.

Como podemos notar los documentos han venido completos y tal vez solo necesitemos un solo atributo, en esos casos debemos pasar un segundo array a find() para indicarle que es lo que necesitamos traer del mismo, por defecto también se incluirá la llave primaria _id aunque no se especifique, veamos el comando para consultar solo los nombres de la consulta anterior:
db.guiamongo.find({“genero”:”Femenino”}, {“nombre”:1});
Veamos en la siguiente imagen como podemos visualizar el resultado donde obtuvimos solo esa propiedad de nuestro documento:


guia-consultas-mongodb-6.jpg

Límitaciones de find()


Como no existen relaciones entre documentos no podemos ejecutar lo que se denomina joins en otros manejadores de Bases de Datos, por lo que no podemos tener una tabla de catálogos y únicamente adicionar el código al documento primario.

Otra limitación es que no podemos buscar y hacer condiciones con elementos del mismo documento, por ejemplo comparar la “edad” con otro campo numérico del mismo documento. Si esto lo tenemos en cuenta pronto encontraremos formas adecuadas de tratar nuestros documentos en MongoDB.

Operadores de comparación


El hecho que trabajemos con arrays y emparejando los mismos con las propiedades no implica que no podamos hacer comparaciones como mayor que, menor que, mayor o igual que, menor o igual que; sabemos que estas comparaciones son vitales en muchos sistemas que trabajan con consultas, es por ello que en MongoDB existen unos operadores especiales para estos casos, veamos cuales son:

$lt
Es el equivalente a menor que y nos va a traer todos los documentos cuya propiedad sea menor que la condición, se excluyen todos los que coincidan con el valor exacto.

$lte
Funciona igual que la comparación anterior, pero esta vez sí incluye los documentos que sean iguales al valor de la comparación.

$gt
Funciona exactamente igual que la primera condición, únicamente que evaluará los valores mayores en la consulta.

$gte
Al igual que $lte evaluará todas las condiciones mayores y también incluirá el valor que se utiliza como medición.

Veamos a continuación como podemos emplear estas herramientas dentro de find() con un pequeño ejemplo.

En primer lugar vamos a consultar todos los documentos cuya edad sea menor a 25 años. Para ello colocaremos la edad y luego le pasaremos un array con la condición a evaluar cómo podemos notar en el siguiente comando:
db.guiamongo.find({"edad":{"$lt":"25"}});
Esto nos dará como resultado lo siguiente:


guia-consultas-mongodb-7.jpg

Como vemos la consulta es muy sencilla y la podemos adecuar con lo que vimos anteriormente, de seleccionar que campos o propiedades del documento debe mostrarse, esto queda como ejercicio para que lo realicen.

Algo muy interesante es que podemos encadenar varias condiciones en la misma línea, con ello logramos una consulta mucho más específica, así obteniendo los resultados que de verdad necesitamos, por ejemplo digamos que necesitamos todos los mayores de 20 años pero menores de 30, para ello con el siguiente comando bastaría:
db.guiamongo.find({"edad":{"$gt":"20","$lt":"30"}});
Esto nos debe generar un resultado similar a la siguiente imagen:


guia-consultas-mongodb-8.jpg

El operador $not


En ocasiones necesitamos consultar pero a su vez queremos que un valor o una serie de valores específicos no aparezcan, para ello tenemos el operador de negación $not, este puede aplicarse a cualquier condicional, y con ello los documentos que correspondan al criterio no aparecerán.

Por ejemplo vamos a reescribir el ejemplo anterior, donde en vez de ubicar el segmento mayor de 20 y menor de 30 vamos a excluirlos, para ello simplemente modificamos nuestro comando de la siguiente forma:
db.guiamongo.find({"edad": "$not":{"$gt":"20","$lt":"30"}}});
Esto nos genera el siguiente resultado:


guia-consultas-mongodb-9.jpg

Como vemos hemos obtenido lo opuesto a lo que colocamos en las condiciones de comparación.

El operador $in


El operador $in funciona como la cláusula OR del lenguaje SQL tradicional, lo que nos permite obtener es simplemente los documentos que correspondan con una u otra de las condiciones que le pasemos.

Por ejemplo, vamos a buscar a las personas que sean de Chile o Argentina, en nuestros datos de pruebas tenemos dos registros que cumplen este criterio.
db.guiamongo.find({"pais":{"$in": ["Chile", "Argentina"]}});
Al visualizar el resultado por consola tendremos que conseguimos lo esperado.


guia-consultas-mongodb-10.jpg

Con esto hemos finalizado este tutorial, ya tenemos una guía básica para realizar consultas contra nuestras Bases de Datos hechas en MongoDB, esto es muy importante saberlo ya que las Bases de Datos no relacionales o noSQL como se les conoce, también son la tendencia y el futuro del almacenamiento para las aplicaciones.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X