Instalar MongoDB en Windows
Como ya escribí en el artículo “Introducción a NoSQL”, MongoDB es una base de datos NoSQL de tipo documental, es decir, trabaja con un modelo de datos documental, o séase, con archivos en formato JSON y BSON.
Está disponible para trabajar en varios sistemas operativos y sobre varios lenguajes de programación.
Este articulo pretende explicar la instalación y uso de un servidor MongoDB bajo Windows y su posterior uso desde la línea de comandos (shell), para más adelante poder trabajar con MongoDB usando algún lenguaje de programación como PHP.
Instalación
Bastará con buscar el instalador correcto desde la página oficial aquí.
Aunque desde la misma web oficial puedes descargarte el “instalador” para el sistema operativo que desees. Desde Linux hasta MacOS.
Nosotros nos centramos en Windows 🤷♂️
El proceso de instalación es bastante simple.
Ejecutamos el instalador descargado y nos asegurarnos de marcar MongoDB como un servicio:
Para después de darle a siguiente, elegir si instalamos o no MongoDB Compass, el cual es una interfaz gráfica para manejar la base de datos:
Como ya digo, a elección de cada un@ 😉
Por ahora el uso de MongoDB Compass no lo vamos a ver. Nos centraremos en usarlo a través de la línea de comandos.
Continuemos…
Después de la instalación, si no lo está ya, agrega el directorio bin de MongoDB al PATH del sistema y crea el directorio C:\data\db, que será donde MongoDB almacenara los datos.
Ahora, para comprobar que el servidor está corriendo o para iniciarlo, en la línea de comandos escribimos:
mongod
Y deberíamos de ver algo así:
{"t": ... "msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}
Ahora bien, ya tenemos el servidor MongoDB instalado, pero si queremos interactuar con la base de datos desde la línea de comandos, como haríamos con un servidor MySQL, por ejemplo, debemos de descargar lo que se conoce como MongoDB Shell.
El proceso de instalación es bastante simple; siguiente, siguiente…
Lo único de lo que debemos de asegurarnos es de, una vez más, agregar al PATH del sistema el directorio donde se ha instalado mongosh.
En mi caso quedaría así:
Abrimos otra línea de comandos y escribimos:
mongosh
Si hemos hecho todo correctamente, mongosh se conectará al servidor y mostrará el prompt de MongoDB.
Una vez hayamos hecho toooodo esto, que no es poco, vayamos al lio. Ahora sí, empezaremos por crear una base de datos.
Selección o creación de una base de datos
Para usar una base de datos en concreto, usamos el comando:
use baseDePruebas
Tranquil@, si esta no existe, se creará automáticamente cuando insertemos datos en ella.
Crear o insertar datos
Para insertar datos y a la vez crear la base de datos (sino existe), basta con hacer:
db.Usuarios.insertOne({ nombre: "Óscar", edad: 36, profesion: "Desarrollador" })
El proceso sería el siguiente:
Creo que es bastante fácil, no tiene perdida.
Un asunto a resaltar aquí, es que MongoDB llama “colecciones” a lo que serían las tablas en bases de datos relacionales. Y “documentos”, a los datos o, para entendernos mejor, un documento en MongoDB equivaldría a una fila en una tabla relacional.
Debemos de acostumbrarnos a esto. Tenlo en cuenta a partir de ahora.
Lo que acabamos de hacer, en la jerga de MongoDB, ha sido, primero crear una base de datos llamada “baseDePruebas” (que alarde de originalidad 😅) y después crear una colección (que vendría a ser una tabla) llamada “Usuarios” con un documento que contiene nombre, edad y profesión.
Lo dicho, fácil ¿no?
Recuerda que en MongoDB o, mejor dicho, en una base de datos NoSQL, no hace falta especificar el tipo de dato a guardar.
Insertar múltiples documentos
Ahora vamos a insertar de una vez varios datos (varios documentos) en nuestra colección de “Usuarios”. Para ello, en lugar de insertOne(), usamos insertMany():
db.Usuarios.insertMany([ { nombre: "Ana", edad: 25, profesion: "Programadora" }, { nombre: "Pepe", edad: 35, profesion: "Arquitecto" } ])
Obtener todos los documentos
Para obtener todos los documentos que hemos creado en nuestra colección:
db.Usuarios.find()
Buscar un documento específico
Lo que equivaldría a buscar una fila:
db.Usuarios.find({ profesion: "Programadora" })
Actualización de datos
Tenemos la opción de actualizar o bien un documento con updateOne o, varios documentos con updateMany.
Por ejemplo, actualicemos la profesión de Ana. En lugar de programadora ahora se dedica al diseño:
db.Usuarios.updateOne( { nombre: 'Ana' }, { $set: { profesion: 'Diseñadora gráfica' } } )
Ahora vamos actualizar la profesión de todos los documentos.
Por ejemplo, supongamos que queremos que todos tengan la misma profesión:
db.Usuarios.updateMany( {}, // Filtro: selecciona todos los documentos { $set: { profesion: 'Freelancer' } } )
Como ves todas las profesiones han sido cambiadas a “Freelancer”.
Ahora me paro aquí, y hablemos un poco de los filtros.
Lo que acabamos de hacer es que mediante el primer argumento del método updateMany(), es decir, {}, hemos seleccionado todos los documentos.
¿Pero qué pasa si queremos aplicar alguna condición o filtro en concreto?
Supongamos que queremos cambiar la profesión a «Senior Developer» pero solo para los usuarios cuya edad sea 35.
Haríamos así:
db.Usuarios.updateMany( { edad: 35 }, { $set: { profesion: "Senior Developer" } } )
Ahora el usuario “Pepe” es un “Senior Developer” 😀
Pero ahora… ¿Y si queremos ser más específicos y actualizar solo la profesión de los usuarios que sean menores de 35 haciendo que sean «Junior»?
Para eso tenemos varios tipos de operadores que podemos combinar para crear una condición como son:
- $eq: equal/igual que
- $gt: greater than/mayor que
- $lt: low than/menor que
- $ne: not equal/distinto que
- $lte: low than equal/menor o igual que
Y muchos más que puedes consultar aquí.
Para el ejemplo, haríamos así:
db.Usuarios.updateMany( { edad: { $lt: 35 } }, { $set: { profesion: "Junior Developer" } } )
Como Ana es la única que cumple la condición, es la única que cambia su profesión.
Ver colecciones
Para ver las colecciones que tiene una base de datos o, una vez más, lo que equivaldría a las tablas que tiene una base de datos, ejecutaremos el comando siguiente:
show collections
En nuestro ejemplo como se puede ver solo tenemos una colección (tabla) llamada “Usuarios”.
Eliminar datos
Para borrar documentos, usamos deleteOne() para eliminar un documento o deleteMany() para eliminar varios.
Imagina que queremos eliminar el usuario “Pepe”:
db.Usuarios.deleteOne({ nombre: "Pepe" })
Pero recuerda que también podemos hacerlo de otra manera. Aplicando una condición.
Por ejemplo, podemos querer eliminar los usuarios cuya edad sea mayor a 25.
Para eso usaríamos deleteMany() y la condición $gt así:
db.Usuarios.deleteMany({ edad: { $gt: 25 } })
Como ves solo nos quedaría la usuaria “Ana”:
Eliminar una colección al completo
Para eliminar una colección entera (lo que equivaldría a eliminar todas las filas):
db.Usuarios.drop()
Eliminar base de datos
Para eliminar toda la base de datos, debemos primero entrar en esa base de datos, o sea, seleccionar la base de datos y, una vez dentro de ella, ejecutar el comando:
db.dropDatabase()
Y hasta aquí como instalar y trabajar en MongoDB bajo Windows.
Se podría ampliar un poco más el artículo, pero creo que para un primer acercamiento a MongoDB está bien. Además, he de decir que este articulo me ha servido también a mi como aprendizaje ya que nunca había usado MongoDB.
Por último, quiero comentarte que como ya has visto, trabajar con MongoDB desde una línea de comandos, consola, terminal… (llámalo como quieras) es un poco engorroso. No es lo mismo que hacerlo con MySQL mediante consultas SQL, ¿a qué no? 😉
Es por eso que como dije al principio tenemos la opción de usar MongoDB Compass o, como explico aquí, usar MongoDB con algún lenguaje de programación.