MongoDB se ha dado a conocer como una base de datos sencilla de usar y que proporciona un alto rendimiento y alta disponibilidad. Ya hablamos de las virtudes de MongoDB en la introducción al StackMEAN (1).
Una alta disponibilidad en base de datos significa que los datos estén siempre accesibles. MongoDB lo logra gracias al uso de la replicación. Esto quiere decir que los datos estarán disponibles en más de un servidor a la vez, para que en el caso de que uno falle por cualquier motivo, los datos se puedan leer o escribir usando otro servidor.
En esta entrada vamos a hablar de cómo instalar MongoDB y cómo usarlo en nuestro entorno local de desarrollo, así tendremos MongoDB disponible para nuestras futuras aplicaciones.
¿Por qué nos beneficia usar MongoDB dentro del Stack MEAN?
Pues porque MongoDB es una base de datos NoSQL orientada a documentos (base de datos documental) y estos documentos son de tipo JSON, que tendrían la siguiente forma:
1 |
{"username":"funnyfrontend", "age": 23, "city": "Córdoba"} |
Las operaciones o consultas a los documentos las realizamos con JavaScript y se enviaran al lado del cliente en este formato JSON.
Recuerda que lo que mola del Stack MEAN es que todo se comunica con un solo lenguaje de programación: JavaScript.
Desarrollamos el frontend (lado del cliente) con AngularJS, básicamente es lo que mostramos al usuario en su pantalla. AngularJS hace las llamadas al API REST (Post, Put, Get y Delete) construida con NodeJS y el framework express. Luego este API hace un CRUD (Create, Read, Update y Delete) a la base de datos en MongoDB, que a su vez da la respuesta obteniendo así el API los datos que se le han pedido en la llamada. Estos datos los envía el API a AngularJS (frontend) en formato JSON y se le mostrará al usuario sin necesidad de recargar la página, puesto que AngularJS mantiene los datos actualizados de la base de datos sin necesidad de actualizar la página web.
¡Ey espera!, ¿qué son las colecciones en MongoDB?
Ya que vamos a emplear el término colección repetidas veces, vamos aclararlo.
Las colecciones en MongoDB son algo parecido a las tablas en un modelo de base de datos entidad-relación. Son un grupo de documentos relacionados.
Como ya dijimos MongoDB es una base de datos orientada a documentos, y al contrario que las bases de datos relacionales, no es necesario seguir un esquema. Los documentos de una misma colección pueden tener esquemas diferentes.
Por ejemplo si tengo una colección llamada Hobbits, el documento puede almacenarse de la siguiente forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ Nombre: "Bilbo", Apellidos: "Bolsón", Edad: 50, Aficiones: ["comer","leer","fumar"], Amigos: [ { Nombre:"Gandalf", Edad:657 }, { Nombre:"Thorin", Edad:208 } ] } |
El código de arriba es el típico documento JSON, con sus strings, arrays, números y subdocumentos. En esa misma colección podemos guardar otro documento como este:
1 2 3 4 5 |
{ Nombre: "Frodo", Oficio: "Portador del Anillo Único", Amigos:15 } |
Este documento no sigue el mismo esquema que el primero ya que tiene menos campos, un campo nuevo que no existe en el documento anterior e incluso un mismo campo de distinto tipo (Amigos).
Esto es algo impensable en una base de datos relacional, pero es totalmente válido en MongoDB.
Aclarado esto, vamos con la letra «M» del stack MEAN, ¡a instalar MongoDB se ha dicho!
Instalar MongoDB localmente
Hay una serie de pasos que debes saber para usar MongoDB de forma local. Este proceso es el mismo para los diferentes sistemas operativos, aunque hay pequeños detalles que pueden variar. Los pasos a seguir son:
- Instalar MongoDB
- Crear una carpeta (con los permisos adecuados) para guardar la base de datos
- Ejecutar el servicio de MongoDB
- Conectar o usarlo en una aplicación después de que el servicio se haya iniciado
Vamos a explicar la instalación en Mac y Windows (el cómo hacerlo en Linux se puede ver en la documentación de MongoDB), y después exploraremos algunos comandos básicos que podemos usar en MongoDB.
Instalación en Mac
La carpeta por defecto en la instalación en Mac es /data/db. Aquí será donde guardaremos todo y debes asegurarte de tener permisos en esta carpeta para que MongoDB pueda escribir sobre ella.
Instalamos MongoDB en Mac usando Homebrew o de forma manual. En este artículo lo haremos con Homebrew, vamos a la terminal y ejecutamos los siguientes comandos:
1 2 |
// primero actualiza tus packages sudo brew update |
1 2 |
// instalamos mongodb sudo brew install mongodb |
El último comando puede llevar algo de tiempo.
Ahora nos aseguramos de que todo funciona escribiendo:
1 |
mongod |
Esto iniciará el servicio de MongoDB, debería aparecerte «waiting for connections on port 27017» .
Si al ejecutar el comando de arriba ves algún error sobre los permisos, asegúrate de cambiarlos en tus carpetas /data/db con este comando : chmod -R 777 /data/db

Iniciando el servicio MongoDB
Una vez que tenemos el servicio MongoDB se ha iniciado, podemos conectarnos a él usando el comando:
1 |
mongo |
Ejecuta el comando de arriba en un terminal aparte, ya que debemos tener en la anterior el servidor funcionando.

Conectándonos a MongoDB desde el terminal
Ahora deberías ver cómo mongo se conecta a un servicio mongod en el puerto 27017 de nuestro localhost (es el que tiene asignado por defecto).
Instalación en Windows
Instalar MongoDB en Windows es bastante sencillo. Primero descárgate MongoDB aquí. Una vez descargado e instalado (siguiente, marca instalación Completa, siguiente) debes añadir la ruta del ejecutable de MongoDB a tu PATH (variable de sistema). Ya sabes que esto se hace para poder ejecutar Mongo en consola sin tener que escribir la ruta completa hasta el ejecutable.
Para añadir mongodb a tu PATH vamos a Inicio > Equipo > Propiedades del Sistema > pestaña Opciones avanzadas.
Haz click en Variables de entorno, y marca la variable PATH. Dale a Editar, escribe ‘;’ y tras eso la ruta de tu ejecutable de Mongo, en mi caso C:\Program Files\MongoDB\Server\3.0\bin. Acepta varias veces y listo.

Variable de entorno de MongoDB
Ahora deberías poder ejecutar:
1 |
mongod |
en tu consola. Un error habitual que puede darte es «Data directory C:\data\db no found...» , ya sabes, ve a C:\ y crea ese directorio. Ahí es donde se almacenarán los datos (C:\data\db).
Si quieres especificar una ruta diferente a la que hay por defecto, data/db, puedes pasarle otra ruta escribiendo:
1 |
mongod --dbpath ruta/nueva-a/la-carpeta-db |
Una vez creadas esas carpetas y con el PATH correcto, inicia mongo en consola con el comando ‘mongod‘ y deberías ver «waiting for connections on port 27017»:

Iniciando MongoDB
Ya puedes conectarte a la base de datos y ejecutar algunos comandos. Importante: Asegúrate de dejar mongod funcionando en una consola y abre otra nueva y escribe mongo para conectarte y probar estos comandos.
Comandos básicos de MongoDB
Las consultas en un sistema de base de datos documental son un poco diferentes a lo que estamos acostumbrados. En lugar de hacer consultas para datos insertados en tablas, vamos hacer consultas a colecciones de documentos.
Recuerda que todo se guarda en documentos con formato JSON (bueno, más bien se guardan en BSON, que es una forma de representar binariamente objetos JSON).
Una vez nos hemos conectado a nuestra instancia de MongoDB usando mongod y mongo posteriormente en otra consola, podemos empezar a ver las bases de datos disponibles y su uso. He aquí los comandos más básicos.
Listar todas las Bases de Datos
1 |
show databases |
Crear Base de Datos
En MongoDB no se crea una Base de Datos por comandos. No existen métodos estilo createDB o createDataBase…
MongoDB crea la base de datos en el instante que insertamos información en esa base de datos, es decir, cuando insertamos un elemento dentro de una colección.
La gracia es que no tienes que preocuparte de crear explícitamente la base de datos, basta con crear una colección y los documentos, y listo.
Un poco más abajo veremos como crear colecciones y documentos con las operaciones CRUD básicas.
Mostrar la Base de Datos actual
1 |
db |
Seleccionar una Base de Datos
1 |
use nombre_de_la_base_de_datos |
Ahora que sabemos los comandos básicos, vamos con las operaciones CRUD principales.
Comandos / Operaciones CRUD en MongoDB
CRUD es el acrónimo de Create, Read, Update y Delete y representa las 4 operaciones básicas que se pueden realizar en cualquier sistema de base de datos: Crear registros, leerlos o buscarlos, actualizarlos y eliminarlos.
Ya verás que estos comandos CRUD en MongoDB serán similares a los comandos que usaremos para controlar las operaciones CRUD de nuestras aplicaciones con Nodejs.
Para estas operaciones usaremos claro está, JSON. Mientras que por debajo, para el almacenamiento y transferencia, MongoDB usa BSON.
Create / Crear
1 2 3 4 5 6 7 8 |
//vamos a una base de datos llamada tierra_media, no importa que no exista use tierra_media //guardamos un hobbit db.hobbits.save({ name: 'Bilbo' }); //guardamos varios hobbits db.hobbits.save([{ name: 'Frodo'}, { name: 'Sam' }]); |
Haciendo esto guardamos un documento dentro de la colección Hobbits en la base de datos actual en las que estás situado.
Si todo ha salido bien habrás creado tanto la base de datos como la colección que no existían.
Read / Buscar
1 2 3 4 5 |
//muestra todos los hobbits db.hobbits.find(); //busca un hobbit específico db.hobbits.find({ name: 'Sam' }); |
Update / Actualizar
1 |
db.hobbits.update({ name: 'Sam' }, { name: 'Samsagaz' }); |
Delete / Borrar
1 2 3 4 5 |
// borrar todos db.hobbits.remove({}); // borrar solo uno db.hobbits.remove({ name: 'Frodo' }); |
Esto ha sido un breve resumen de los comandos que puedes ejecutar. La documentación de MongoDB es muy amplia y ofrece muchos detalles para aquellos que quieran profundizar más.
Mongo ofrece también un excelente certificado profesional para que además puedas iniciarte con los comandos.
MongoDB y su interfaz Robomongo
Si bien es bastante sencillo acceder a nuestras bases de datos a través de la consola, también hay disponible una herramienta que nos da una interfaz de usuario para MongoDB (para aquellos que prefieren las GUI).
Descárgate Robomongo y vamos a darle caña.
Crear una conexión a nuestra base de datos es muy sencillo. Simplemente dale a Create y añade como dirección localhost y como puerto el 27017. Nombra tu conexión como te plazca.

Conectándonos a la base de datos con Robomongo
Una vez conectado tendrás acceso a todas las bases de datos y sus respectivas colecciones. Ahora tienes una GUI(graphical user interface) para manejar las operaciones de la base de datos.

Robomongo conectado a la base de datos
Usando MongoDB en una aplicación Node.js
Como has comprobado, usar una instancia local de MongoDB es un proceso bastante sencillo.
Pero ya es hora de que utilicemos mongooseJS, el package de Node que sirve para trabajar con MongoDB.
Todo lo que tienes que hacer es configurar mongoose para conectarlo a la base de datos local. Es muy simple ya que ni siquiera necesitamos crear la base de datos.
Antes de nada nos asegurarnos que MongoDB se inicia ejecutando el comando mongod (como ya hicimos antes):
1 |
mongod |
Conectándonos a una base de datos MongoDB usando Mongoose
He aquí un ejemplo de código para conectarse a una base de datos en Node, primero instalamos el paquete Mongoose:
1 |
npm install mongoose |
Ahora escribimos el siguiente comando para ejecutar node.js y así poder utilizarlo:
1 |
node |
Cogemos los paquetes que necesitamos:
1 |
var mongoose = require('mongoose'); |
Y por último creamos la conexión a una base de datos, ¡la que tú quieras!, no tiene ni por qué existir:
1 |
mongoose.connect('mongodb://localhost/nombre_de_tu_db'); |
En mi caso me he inventado una base de datos de Marvel:
¡Esto es todo!, recuerda que la base de datos se creará automáticamente una vez empieces a guardar documentos en ella.
Ya que tenemos nociones de MongoDB y cómo usarlo, vamos a implementar CRUD y a usar MongoDB con MongooseJS dentro de una aplicación Node.js.
En el próximo tutorial montaremos una API REST usando Node.JS. ¡Nos vemos hasta entonces! 😀
MUY útil, se agradece.
A la espera de nuevos episodios 😀
Saludos!
Muy buena serie de tutoriales. Queremos más!!
Muy bueno pero me dejaste hasta aquí En el próximo tutorial montaremos una API REST usando Node.JS 🙁
hola que tal:
seguirán con los tutoriales? están muy buenos, muy buena información. Seguiré un rato por aquí.
Saludos.
Estoy a la espera del siguiente episodio!!, muy buenas todas estas guías del Stack MEAN.
Saludos!
Excelentes tutos, espero y puedas actualizaros, un abrazo!
Hola, antes que nada te agradezco por compartir, son unos excelentes tutoriales y fáciles de seguir.
Ahora vuelvo con tu frase de cierre de este tutorial, (En el próximo tutorial montaremos una API REST usando Node.JS. ¡Nos vemos hasta entonces! )
Cuando nos vemos?
ya no quisieron continuar con el curso?, emepzaron muy bien, por favor continuen es una excelente referencia.
saludos, gracias.
a la espera de que continuen con el curso.
Con la miel en los labios, es con diferencia lo que mas me ha aclarado sobre el stack MEAN, desde que empecé a interesarme por el.
Muchas gracias y espero con ansia el próximo episodio
Hola que tal, hace dos meses publiqué un comentario esperando que siguieran el tutorial. Quiero entender que ha muerto el curso verdad? sé que no ha de ser fácil crear contenido actualizado de forma gratis y agradezco su iniciativa, por el momento buscaré más info en otra página, gracias de todas formas. Gracias.
Felicidades por la explicación, realmente buena. Ojala esto siga, estoy muy interesado en la creación completa y funcional de una aplicación con stack mean, y si fuese con angular2 sería perfecto para mi. En cualquier caso gracias y a la espera de más publicaciones.
sapeeeee, muy buen tutorial, es como una novela sin fin, buenisimooooo!!!
felicitaciones men
Hola, me está encantando estos post/tutorial de stack mean. He visto que hace mucho tiempo que no posteas sobre esto y me parece una pena, ya que de todos los tutoriales que vi el tuyo es sin duda el mejor. Te felicito por saber escribir y explicar tan bien y me gustaría poder aprender mas de mean por aqui.
Un saludo y espero que te animes a seguir 😀