En esta sesión daremos unas nociones básicas de cómo conectar y gestionar una base de datos MongoDB. Para los no iniciados en el tema, MongoDB es el principal representante, actualmente, de los sistemas de bases de datos NoSQL. Estos sistemas se han vuelto muy populares en los últimos años, y permiten dotar de persistencia a los datos de nuestra aplicación de una forma diferente a los tradicionales sistemas SQL.
En lugar de almacenar la información en tablas con sus correspondientes campos y registros, lo que haremos será almacenar estructuras de datos en formato BSON (similar a JSON), lo que facilita la integración con ciertas aplicaciones, como las aplicaciones Node.
Las bases de datos NoSQL y SQL comparten algunas similitudes, ya que ambas gestionan y almacenan información en bases de datos. Sin embargo, la principal diferencia entre ellas radica en cómo organizan y almacenan los datos.
En las bases de datos SQL, los datos se estructuran en tablas formadas por filas (o registros), y cada registro tiene una estructura fija, es decir, todos los registros en una tabla comparten los mismos campos o columnas.
Por otro lado, en las bases de datos NoSQL, como MongoDB, los datos se organizan en colecciones, que equivalen a las tablas de las bases de datos SQL. Cada colección contiene documentos, que son similares a los registros de SQL, pero con una diferencia clave: los documentos no tienen una estructura fija. Aunque es común que los documentos dentro de una misma colección compartan muchas de sus propiedades, cada uno puede tener un conjunto diferente de campos o propiedades, lo que proporciona una mayor flexibilidad para manejar datos no estructurados o semiestructurados.
En MongoDB, estos documentos se almacenan en formato BSON (una extensión binaria de JSON), lo que permite una fácil integración con lenguajes como JavaScript y una representación eficiente de tipos de datos complejos.
MongoDB es, a día de hoy, el servidor de bases de datos No-SQL más utilizado y popular. Como hemos comentado, permite estructurar la información en colecciones, formadas por documentos, que se traducen de forma sencilla a objetos en JavaScript, de ahí su popularidad a la hora de cooperar con aplicaciones Node.js.
Versión requerida: se recomienda instalar la última versión disponible, ya sea mediante el gestor de paquetes de tu sistema operativo (como
aptpara Ubuntu obrewpara macOS) o descargándola directamente desde la página oficial de MongoDB.
MongoDB se puede instalar y utilizar de tres maneras principales:
Podemos instalar MongoDB de forma local en nuestro sistema, como aplicación independiente (donde nosotros ponemos en marcha y detenemos el servidor) o como servicio que se inicia automáticamente al arrancar el sistema. En esta página tenemos instrucciones generales de instalación. Debemos elegir el sistema operativo para el que la queramos instalar y seguir los pasos que se indican.
Como la instalación y gestión de sistemas MongoDB no forma parte de los contenidos fundamentales de este curso, no entraremos en demasiados detalles al respecto. A continuación puedes ver distintos ejemplos de instalación de MongoDB en local que puedes probar, dependiendo del sistema operativo que tengas. Pero, si ninguno de ellos te convence o funciona adecuadamente, siempre puedes acudir a MongoDB Atlas para gestionar tus bases de datos (ver apartado de MongoDB Atlas para más información).
En este ejemplo instalaremos MongoDB como aplicación independiente en un sistema Windows. Para ello descargamos un archivo ZIP de la página de Community, y lo descomprimimos donde queramos. También podemos descargar el instalador MSI y seguir los pasos del asistente (elegir instalación Completa). Conviene recordar la carpeta en la que se instala MongoDB (C:\Archivos de programa\MongoDB\Server\X.Y, siendo X.Y la versión descargada), ya que habrá que acceder a esta carpeta para arrancar el servidor manualmente.
Una vez instalado o descomprimido MongoDB en el sistema, es necesario crear una carpeta donde se almacenarán las bases de datos. Podemos llamarla como queramos, aunque es habitual usar el nombre data o mongo-data. Esta carpeta debe ubicarse en un lugar accesible y fácil de localizar. Por ejemplo, C:\mongo-data.
Para iniciar el servidor debemos acceder desde un terminal a la subcarpeta bin de la carpeta de instalación de MongoDB, y ejecutar desde el propio terminal el comando mongod, indicando en el parámetro --dbpath la ruta hacia la carpeta que hemos creado para almacenar los datos.
mongod.exe --dbpath=C:\mongo-data
NOTA: puedes crear un archivo BAT en la carpeta
binde MongoDB con este comando (por ejemplo, llamadoservidor.bat), y así bastará con hacer doble clic en el archivo en lugar de teclear el comando cada vez en terminal.
Se mostrarán unos cuantos mensajes por la consola, y uno de ellos indicará que MongoDB queda a la espera de conexiones en el puerto por defecto, el 27017:
2022-10-11T01:12:27.195+0100 I NETWORK
[thread1] waiting for connections on port 27017
En Ubuntu y otras distribuciones basadas en Debian, el método más recomendable es usar el repositorio oficial de MongoDB. Sigue los pasos indicados en la web oficial para la distribución de Linux que necesites.
Por ejemplo, para instalar MongoDB 8.2 en Debian 12 se indica utilizar los siguientes comandos:
sudo apt-get install gnupg curl
curl -fsSL https://pgp.mongodb.com/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org
La carpeta donde se almacenan las bases de datos podemos crearla, por ejemplo, en el directorio personal del usuario: /home/usuario/mongo-data. Es importante asegurarse de que MongoDB tenga los permisos adecuados para escribir en esta carpeta, especialmente en sistemas basados en Unix. Después, se ejecuta un comando similar al de Windows para ponerlo en marcha:
mongod --dbpath=/home/usuario/mongo-data
MongoDB y TLS
MongoDB, como muchas otras aplicaciones que se comunican por red, utiliza el protocolo TLS (Transport Layer Security) para cifrar las conexiones entre cliente y servidor. Para implementar este cifrado, MongoDB depende de una librería del sistema llamada libssl, que forma parte del proyecto OpenSSL. Cada versión de MongoDB se compila con una versión concreta de OpenSSL.
Por eso:
Si estás utilizando una versión anterior de Ubuntu que aún requiere libssl1.1, puedes añadir el repositorio focal-security ejecutando este comando en una sola línea::
$ echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
$ sudo apt-get update
La instalación de MongoDB como servicio deja el servidor instalado y puesto en funcionamiento en el sistema, y proporciona una serie de comandos para poder detener y reanudar el servicio desde terminal. Esta opción es particularmente útil en sistemas de producción (no tanto de pruebas o desarrollo) para dejar la base de datos permanentemente en marcha. Sin embargo, los pasos a seguir varían mucho de un sistema a otro, y también con las distintas versiones de MongoDB. A continuación facilitamos los enlaces directos a la documentación para cada sistema operativo:
En el caso de Linux, por ejemplo, una vez instalado podemos utilizar estos comandos para conocer el estado actual del servidor, pararlo, iniciarlo o reiniciarlo, respectivamente:
sudo systemctl status mongod
sudo systemctl stop mongod
sudo systemctl start mongod
sudo systemctl restart mongod
Para permitir que MongoDB se inicie automáticamente en cada reinicio del sistema, ejecutamos este comando:
sudo systemctl enable mongod
En el caso de que no queramos (o no haya sido posible) instalar MongoDB en nuestro sistema, podemos utilizar las bases de datos MongoDB en la nube proporcionada a través de MongoDB Atlas. En esta web podemos registrarnos y elegir el plan gratuito, que ofrece una capacidad máxima de 512MB de almacenamiento, pero suficiente para lo que vamos a probar durante este curso. Una vez nos hemos identificado, seleccionamos en el menú de la izquierda Deployment > Database, y a continuación creamos un cluster.
Al crear el cluster, elegimos el plan de pago (gratuito), y también podemos elegir la plataforma cloud donde se desplegará la base de datos (Amazon, Azure, Google) y la ubicación. La elección de una u otra opción no es importante para lo que haremos en el curso, aunque cuanto más cerca elijamos la ubicación más rápida será la conexión a la base de datos. También tendremos que elegir el nombre del cluster que se creará (no es muy relevante, pero sí conviene tenerlo presente porque dentro definiremos las bases de datos que necesitemos).
Después de que el clúster esté creado, es necesario configurar quién puede acceder a la base de datos. Seleccionamos desde el menú de la izquierda Security Quickstart. Podemos hacerlo a través de usuario y contraseña o a través de certificado; en nuestro caso elegiremos la primera opción, y pulsamos el botón para generar el usuario (Create User).
Un poco más abajo generamos las ubicaciones permitidas para acceder a la base de datos. Podemos elegir a mano algunas direcciones IP predeterminadas, o pulsar el botón de Add my current IP address para que se genere automáticamente la IP desde la que nos conectamos actualmente.
Cuando el cluster ya esté configurado podremos acceder a él desde la sección de Clusters del panel izquierdo. Pulsando en el botón Connect podemos ver distintas opciones de conexión desde distintas fuentes:
Algunas herramientas de conexión las veremos en el siguiente apartado, y si queremos conectar mediante código (por Node.js, por ejemplo), tenemos la opción Drivers:
Para poder conectar al servidor y gestionar las bases de datos que tengamos instaladas podemos utilizar diversas herramientas. En este apartado propondremos dos de ellas:
Como primera opción podemos instalar y utilizar un plugin como MongoDB for vscode, que podemos consultar en el marketplace oficial. Una vez instalado, desde la paleta de herramientas de VS Code tendremos acceso directo a MongoDB:
Aquí debemos configurar la conexión a nuestro servidor MongoDB (suponiendo que lo tengamos iniciado ya, como se ha explicado anteriormente). Pulsamos en el enlace Add Connection de la parte superior izquierda y configuramos los parámetros de conexión (también podemos editar conexiones o borrarlas desde estos enlaces):
Deberemos verificar la dirección y puerto, que por defecto son localhost y 27017 respectivamente. Nos conectamos a la base de datos, pulsando en el botón Connect. Tras conectar, en el panel izquierdo tendremos el explorador para examinar los elementos del servidor Mongo. Cuando creemos una base de datos, aparecerá en el listado, junto con las tablas o colecciones que contiene. Haciendo clic en una colección, podemos ver a la derecha los documentos que contiene.
En el caso de que queramos conectar a un cluster de MongoDB Atlas, simplemente especificamos la URL de conexión junto con los parámetros de autenticación correspondientes. Podemos acceder a nuestra cuenta Atlas y pulsar en el botón Connect del cluster al que queramos conectar para obtener la URL de conexión:
Desde VS Code, creamos una conexión como Connection String y pegamos la URL que nos indique Atlas (incluyendo nuestro password en ella):
MongoDB Playground es una funcionalidad disponible en el editor de Visual Studio Code que permite ejecutar comandos de MongoDB directamente desde un archivo de texto sin necesidad de crear un servidor o usar Node.js. Es una herramienta útil para realizar pruebas rápidas y ejecutar comandos de MongoDB de forma interactiva.
Para probarlo, conéctate a tu instancia de MongoDB y haz clic en el botón New Playground. Esto abrirá un archivo de texto donde podrás escribir y ejecutar comandos de MongoDB.
Escribe el siguiente código de ejemplo:
const database = "DAW";
const collection = "Contactos";
// Crear una nueva base de datos
use(database);
// Crear una nueva colección
db.createCollection(collection);
// Insertar un documento en la colección
db.Contactos.insertOne({
nombre: 'May',
telefono: '666777888'
});
Observa que no es necesario crear la variable db. El entorno del playground ya define db por ti. Cuando haces use(database), MongoDB automáticamente cambia el contexto de db a la base de datos especificada en el comando use.
Haz clic en el botón Play (o en “Run All” en la parte superior del archivo del Playground) para ejecutar el código. Verás la salida del código en el panel de salida, que te mostrará el resultado de la inserción del documento.
Compass es una herramienta de gestión de bases de datos MongoDB gratuita, y disponible en la propia web de MongoDB (aquí el enlace).
Desde la herramienta tendremos un pequeño formulario de conexión, que podemos utilizar tanto para conectarnos a una base de datos local…
… como a una base de datos en la nube, proporcionando la URL que nos indique Atlas:
La herramienta Studio3T es una evolución de una herramienta previa llamada Robomongo, que se empleaba en versiones anteriores para conectar con MongoDB. Esta herramienta posteriormente evolucionó en Robo3T, que era una versión gratuita de otra comercial llamada Studio3T. Con el paso de los años, todo se ha unificado con el nombre Studio3T, que ofrece la herramienta tanto de forma comercial como gratuita, a través de este enlace.
En estos apuntes no explicaremos cómo utilizarla, ya que su uso es muy similar a Compass. Pero dejamos esta opción también para quienes no os termine de convencer ninguna de las alternativas propuestas.
Aquí tienes disponible un vídeo resumen de cómo instalar MongoDB como aplicación independiente en Windows/Mac/Linux, y de cómo usar MongoDB Atlas desde VS Code o desde Compass.
Ejercicio 1: instala MongoDB en local en tu sistema (o utiliza MongoDB Atlas) y, empleando alguna de las herramientas vistas (plugin de VS Code, Compass o Studio 3T), trata de conectar al servidor/cluster que hayas creado.