Uno de los objetivos de la nueva versión 3.2 de MongoDB es centrarse en la forma en la que se pueden explotar los datos almacenados orientados para Data Scientifics y Bussiness Inteligence.

La herramienta de la que vamos a hablar en este post es Compass. Esta aplicación está disponible para plataformas Mac y Windows, y próximamente estará disponible también para entornos de escritorio Linux. El único requisito impuesto para descargar la herramienta es que si queremos usarla en producción debemos haber adquirido una licencia de MongoDB Enterprise previamente.

Compass nos permite explorar la estructura de los documentos de las distintas colecciones que componen una base de datos de una manera fácil e intuitiva. Además, permite realizar algunas queries de manera visual a base de clics de ratón sin necesidad de saber la sintaxis del CRUD de MongoDB.

Un claro caso de uso es para alguien que necesite examinar la estructura de una base de datos y los distintos campos que componen los documentos. Se podría asemejar a Toad del mundo relacional, que permite realizar queries sencillas y analizar los datos de los documentos. También puede recordarnos a MySQL Workbench, que permite obtener un diagrama de entidad-relación de una base de datos y mostrar la descripción del modelo de datos.

No hay que olvidar que MongoDB es una BBDD NoSQL y que la estructura de sus campos no es fuertemente tipada, por lo que nos ofrece estadísticas de los tipos de datos existentes por cada campo así como los valores almacenados en los mismos. Es por ello que no puede ofrecernos un esquema de Entidad Relación ya que carece de sentido en una base de datos no relacional. Para poder mostrar esta información hace uso del nuevo operador introducido en la versión 3.2 $sample.

Una vez instalada la herramienta, este es el aspecto de la ventana de bienvenida:

1

Es aquí donde podemos establecer la conexión contra nuestra instancia de MongoDB. Como métodos de autenticación ofrece Usuario y Password, Kerberos y LDAP.

Una vez establecida la conexión contra el servidor, nos permite elegir en el menú lateral (situado a la izquierda) y seleccionar una colección de las distintas bases de datos alojadas en el servidor. Cuando seleccionamos una, comenzará a realizar un análisis de la colección para extraer la información de la misma. Por ejemplo:

2
3

Al analizar la base de datos nos muestra todo tipo de información sobre la misma. En la parte superior nos indica el nombre de la base de datos y la colección, el número de documentos que contiene, el tamaño medio de los documentos, el número de índices y el tamaño total ocupado por la base de datos.

Justamente bajo esta información se indica el ratio de documentos analizados. En este caso la muestra está basada en un 1% de la información de la base de datos.

A continuación se muestra la información de los tipos de datos de cada uno de los campos que se han obtenido en la muestra. El primer campo es _id de tipo objectid. El segundo campo es address el cual es un documento embebido. Nos permite desplegar los campos embebidos y así continuar analizando la información extraída:

4

Así podemos observar que el campo dirección es un documento compuesto por 4 campos: ciudad, país, código postal y calle todos de tipo String. Si situamos el ratón sobre el histograma de país sobre el valor USA, nos devuelve el porcentaje de la muestra correspondiente a dicho país:

5

Continuando el análisis de esta colección de la base de datos, observamos un campo llamado edad en el que nos aparece un histograma con todos los rangos de edad de la muestra:

6

Este histograma es adaptable, si pinchamos y arrastramos para seleccionar un intervalo, nos centramos en documentos que cumplan la restricción que hemos establecido con el intervalo:

7

Como puede observarse, en la parte superior se nos ha generado una query correspondiente al rango que hemos seleccionado. Si pinchamos sobre el botón apply realizará un nuevo reporte de la base de datos basado en la query que hemos generado:

8

Como puede observarse, el número de documentos obtenido es inferior al total de documentos de la colección.

También es posible realizar una query personalizada y obtener información sobre la muestra de datos generada a partir de la query:

9

En este caso hemos buscado todos los usuarios con estado activo. Si pinchamos sobre Apply:

10

El reporte es actualizado con la información únicamente de los usuarios activos. Si además deseamos ver los documentos de la muestra obtenida, podemos pinchar sobre el botón del documento del margen derecho de la pantalla:

11

De esta forma podemos navegar sobre la muestra de los datos obtenida a partir de la query realizada por el menú superior. Por otra parte, sobre algunos de los campos como son name o phone_no, existe un icono de actualización que nos permite obtener más datos de la misma muestra obtenida:

12
13

Tras haber pinchado una vez en cada uno de ellos, hemos obtenido distintos valores de dichos campos de la muestra obtenida.

Hemos añadido a esta colección un índice de coordenadas esféricas sobre un campo llamado location y hemos alimentado la base de datos con las coordenadas geográficas de algunas de las ciudades que aparecían en los datos de la colección. Tras volver a analizar el esquema de la colección, hemos obtenido el siguiente resultado:

14

Se puede observar el nuevo campo location y las coordenadas están representadas en un eje cartesiano representando la latitud y longitud de los documentos dentro de la muestra.

Por último, pinchando sobre el menú Share> Share Schema as JSON, obtenemos una copia en el portapapeles del esquema en detalle de la base de datos como puede verse en los siguientes fragmentos:

js

{
'ns': 'mongodb.fanclub',
'count': 100,
'fields': [
…
{
'name': 'address',
'path': 'address',
'count': 100,
'type': 'Document',
'probability': 1,
'unique': 0,
'has_duplicates': true,
'fields': [
{
'name': 'city',
'path': 'address.city',
'count': 100,
'type': 'String',
'probability': 1,
'unique': 63,
'has_duplicates': true,
'types': [
{
'name': 'String',
'count': 100,
'probability': 1,
'unique': 63,
'values': [
'Wichita, Kansas',
'Riverside, California',
'New Orleans, Louisiana',
'Norfolk, Virginia',
'Albuquerque, New Mexico',
'North Hempstead, New York',
'Dallas, Texas',
'Tulsa, Oklahoma',
…

Este primer bloque nos indica que de la muestra de 100 elementos ha encontrado un campo llamado address con una probabilidad 1 y que se trata de un documento. A su vez los uno de los campos del documento embebido se llama city de tipo string, ha encontrado 63 valores únicos y con probabilidad 1.

js

{
'name': 'location',
'path': 'location',
'count': 11,
'type': [
'Document',
'Undefined'
],
'probability': 0.11,
'unique': 0,
'has_duplicates': true,
'fields': [],
'types': [
{
'name': 'Coordinates',
'count': 11,
'probability': 0.11,
'values': [
{
'0': -97.3361,
'1': 37.6888
},
{
'0': -106.6212,
'1': 35.1132
},
{
'0': -121.8727,
'1': 37.3041
},
{
'0': -97.3361,
'1': 37.6888

En este otro fragmento del esquema, nos encontramos con un campo llamado location cuyo tipo es o un documento o no está definido. En la muestra se ha encontrado con una probabilidad únicamente de 0.11. A su vez en los documentos embebidos encontramos un campo llamado Coordinates, que muestra una lista de valores.

Compass es un buen comienzo como herramienta de análisis de esquema de una base de datos MongoDB. Además es un acelerador para familiarizarse con el lenguaje MQL para realizar queries en MongoDB. En futuras versiones han afirmado que permitirá realizar queries más avanzadas en la barra de búsquedas así como operaciones CRUD. También se espera poder ofrecer soporte para realizar queries del framework de agregación y mostrar resultados en histogramas. Definitivamente Compass es el mejor aliado para poder familiarizarse con MongoDB y saltar al mundo NoSQL.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.