Introducción

Últimamente están adquiriendo gran popularidad las bases de datos NoSQL (Not Only SQL), queson aquellas en las que se emplean otras tecnologías, además de SQL, para manipular la información.

Podemos decir que, frente al modelo relacional, en el que la información se encuentra estructurada y a la que se accede a través de un lenguaje estructurado como es SQL, las bases de datos NoSQL carecen de esquema, la información se encuentra almacenada sin seguir una estructura bidimensional de tablas relacionadas.

¿Por qué una base de datos NoSQL?

Actualmente importantes compañías, como Amazon, Google, Twitter y Facebook, están utilizando bases de datos NoSQL como sistema de almacenamiento.

Y es que las tendencias en el almacenamiento de información han cambiado considerablemente en los últimos años. La aparición de los sistemas Big Data, en los que se manejan enormes cantidades de datos sin estructura y relación aparente, o las necesidades de almacenamiento en la nube, han puesto de manifiesto las limitaciones de las bases de datos relacionales para el tratamiento de este tipo de información.

En estos nuevos sistemas prima la velocidad y el rendimiento frente a la estructuración, y eso es lo que nos ofrecen precisamente las bases de datos NoSQL.

Bases de datos documentales

Las bases de datos NoSQL emplean diferentes mecanismos para la gestión de la información. Uno de estos mecanismos es el almacenamiento de información en forma de documentos JSON. A este tipo de bases de datos se les conoce como bases de datos documentales, y la más utilizada es MongoDB.

Características de MongoDB

Las bases de datos Mongo DB son documentales, lo que significa que la información se almacena en documentos BSON (JSON binario), que ofrece características adicionales al JSON estándar, como es la existencia de distintos tipos de datos.

Al igual que los registros de una base de datos relacional se agrupan en tablas, los documentos de MongoDB se agrupan en colecciones. Pero a diferencia de las tablas, en las que los registros tienen la misma estructura, los documentos de una colección no tienen una estructura fija, lo que proporciona a MongoDB gran flexibilidad en el almacenamiento de la información.

Instalación

El gestor de bases de datos MongoDB es de libre distribución y puede descargarse desde la dirección: https://www.mongodb.com/download-center/community

Al acceder a ella nos aparece la página de descarga, en la que podremos elegir el paquete de instalación en función del sistema operativo que tengamos.

Tras descargar el archivo lo ejecutamos para que se inicie el asistente de instalación. Una vez aceptada la licencia, elegimos el tipo de instalación completa:

En caso de que tengamos el sistema operativo Windows, en la siguiente ventana indicaremos que queremos que MongoDB se instale como un servicio Windows. Aquí podemos ver también la ubicación de los archivos de datos:

Inicio del servidor de base de datos

Una vez instalado, para poder utilizar el servidor de bases de datos de MongoDB tenemos que tenerlo iniciado. Si se ha instalado como servicio, se iniciará automáticamente con el arranque del sistema, sino, debemos hacerlo desde línea de comandos. Para ello nos situamos en la carpeta de instalación del servidor y, dentro de la subcarpeta bin, ejecutamos el archivo mongod.exe.

>mongod

De forma predeterminada, los datos se guardarán en la capeta data\db. Si quisiéramos utilizar otra ubicación, iniciaríamos Mongo de la forma:

>mongod -dbpath path

Donde path es la ruta del directorio donde queremos que MongoDB cree las bases de datos.

Al ejecutar este comando se abrirá la consola del servidor, en la que se nos mostrará que se encuentra iniciado en el puerto 27017. Esta ventana la mantendremos abierta mientras queramos estar conectados al servidor.

Una vez iniciado el servidor, entraremos en el modo JavaScript para poder operar desde línea de comandos con el mismo, para lo cual abriremos otra consola y desde la carpeta bin de instalación lanzaremos el comando:

                >mongo localhost

A partir de ahí, ya podemos operar con el servidor.

Operaciones con el servidor

En el modo JavaScript podemos realizar operaciones tales como listas bases de datos existentes, crear nuevas bases de datos o manipular bases de datos existenes. Si queremos ver la lista de bases de datos de nuestro servidor, lanzaremos el siguiente comando en la consola JavaScript:

>show dbs

Tanto si queremos crear una nueva base de datos, como si queremos operar sobre una ya existente, utilizaremos

                >use nombre_bd

Por ejemplo

                >use formacion

Después de este comando, se habrá creado la base de datos formacion, aunque aún no aparecerá en la lista de bases de datos existentes hasta que no creemos una colección.

Creación de colecciones y documentos

Para crear una colección dentro de una base de datos, utilizamos el método createCollection del objeto db, que apunta a la base de datos en uso:

                > db.createCollection(«cursos»)

Si queremos ver la lista de colecciones de la base de datos en uso utilizaremos el método getCollectionNames()

La creación de documentos dentro de una colección se realiza utilizando el método insert() aplicado sobre la colección. A este método le pasamos como parámetro el objeto JSON que queremos añadir. Recordemos que los documentos no tienen una estructura o esquema fijo, por lo que cada uno puede tener un número diferente de propiedades:

> db.cursos.insert({«curso»:»Java»,»duracion»:150,»precio»:120})

> db.cursos.insert({«curso»:»PHP»,»duracion»:120,»precio»:80,»alumnos»:20})

> db.cursos.insert({«curso»:»MongoDB»,»precio»:100,»alumnos»:20,»modalidad»:»on-line»})

Búsquedas de documentos

Mediante el método find() de la colección podemos realizar búsquedas de documentos en la misma. Utilizando este método sin pasarle ningún parámetro obtendríamos una lista con todos los documentos de la colección. Por ejemplo, si lo aplicamos sobre nuestra colección de cursos obtendríamos:

Como se puede apreciar, todo documento incluye un campo o propiedad _id, que identifica de forma única al documento dentro de la colección. Esta propiedad es establecida automáticamente por el servidor al añadir un documento a la colección.

Si queremos aplicar un filtro en la búsqueda de documentos, le pasaremos al método find() un documento JSON con la siguiente estructura:

                {campo:{operador:valor}}

Por ejemplo, para obtener los cursos cuyo precio sea igual o inferior a 100, sería:

                > db.cursos.find({«precio»:{$lte:100}})

Los operadores más habituales son:

  • $lt:Menor
  • $lte:Menor o igual
  • $gt:Mayor
  • $gte:Mayor o igual
  • $ne:Distinto

Para la igualdad no haría falta operador, se utilizaría un documento con el formato:

                {campo:valor}

Eliminación de documentos

Para eliminar documentos utilizaremos el método delete(), al que habrá que proporcionar como parámetro un documento JSON con el criterio de búsqueda. Por ejemplo, la siguiente instrucción elimina todos los cursos de PHP

                >db.cursos.remove({«curso»:»php»})

Descubre más sobre el tema con nuestro Curso de MongoDB.