MongoDB es un gestor de bases de datos no relacionales o NoSQL orientado a documentos, utilizado para almacenar volúmenes masivos de datos. A diferencia de las bases de datos tradicionales basadas en SQL, MongoDB no se basa en tablas y columnas. 📚🌐
- Qué es un esquema en mongo
- Como configurar la colección para que no rescriba los datos al llegar a la capacidad límite
BJSON (Binary JSON) es una extensión binaria de los archivos JSON. BSON también es una notación de objetos con estructura similar de pares clave-valor. Sin embargo, representa los datos en una forma binaria, lo que lo hace más eficiente para su almacenamiento y transferencia. BSON es ampliamente utilizado en bases de datos NoSQL, como MongoDB, para almacenar y recuperar datos de forma rápida y eficiente. A diferencia de JSON, BSON es binario y no legible por humanos, pero esto lo hace más adecuado para aplicaciones que requieren un alto rendimiento y un menor uso de recursos.
En resumen, JSON es una representación de datos legible por humanos y ampliamente utilizado en aplicaciones web y API's, mientras que BSON es una extensión binaria de JSON utilizada principalmente en bases de datos NoSQL para un almacenamiento eficiente.
-
- Manual de instalación 🛠️
- Instalación de MongoDB Compass 🔩
- Atlas 💡
- Creación de usuario ✨
- Conexión de tu cuenta Atlas con MongoDB Compass 🧭
- Comándos MongoDB Shell 🔍
- Método CRUD y ejemplos 📥
- Validaciónes con $jsonSchema 🔐
Herramientas a instalar 🔧
-
MongoDB Shell
-
MongoDB Compass
-
Descargar MongoDB: Ve al sitio web oficial de MongoDB y descarga la versión adecuada para tu sistema operativo. 📥💻. Ten en cuenta que las versiones oficiales (Enterprise Edition) son versiones que tienen soporte técnico proporcionado por el equipo de MongoDB y otras características, sin embargo, es de pago. La otra opción es la versión de la comunidad (Community Edition), que son versiones de código abierto con características y funcionalidades básicas, pero no ofrecen un soporte oficial por parte de MongoDB, aunque la comunidad puede brindar ayuda.
-
Instalar MongoDB: Sigue las instrucciones de instalación proporcionadas en el sitio web para instalar MongoDB en tu sistema. 🔧🚀
-
Configurar MongoDB: Una vez instalado, es posible que debas configurar ciertos parámetros, como la ruta de almacenamiento de datos o el puerto de escucha. Puedes encontrar información detallada sobre la configuración en la documentación oficial de MongoDB. 📄⚙️
-
Iniciar el servidor: Para iniciar el servidor de MongoDB, abre una terminal o línea de comandos y ejecuta el comando adecuado para tu sistema operativo. Por lo general, el comando es "mongod" o "mongod.exe". 🚀🖥️
-
Interactuar con MongoDB: Una vez que el servidor esté en funcionamiento, puedes interactuar con MongoDB a través de la línea de comandos o mediante herramientas de interfaz gráfica como MongoDB Compass. 💻🔍
¡Listo! Ahora tienes MongoDB instalado y listo para ser utilizado en tu sistema. 🎉🚀
Si quieres saltarte toda la documentación, copia y pega los siguientes comandos en la terminal: 📋 Nota: Los siguientes comandos solo aplican para el sistema operativo Ubuntu 22.04 LTS : 📋
-
Importar la clave pública utilizada por el sistema de gestión de paquetes.
sudo apt-get install gnupg curl
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \ sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \ --dearmor
-
Crear un archivo de lista para MongoDB
sudo touch /etc/apt/sources.list.d/mongodb-org-6.0.list
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
-
Recargar bases de datos de paquetes locales
sudo apt-get update
-
Instalar los paquetes de MongoDB
sudo apt-get install -y mongodb-org
echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-database hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-mongosh hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections
-
Iniciar MongoDB
sudo systemctl start mongod
sudo systemctl daemon-reload
-
Verificar que MongoDB fue correctamente instalado.
sudo systemctl status mongod
sudo systemctl enable mongod
-
Detener MongoDB
sudo systemctl enable mongod
-
Recargar MongoDB
sudo systemctl restart mongod
-
Empezar a usar MongoDB
mongosh
-
Detener MongoDB
sudo service mongod stop
-
Remover Paquetes
sudo apt-get purge mongodb-org*
-
Remover los directorios de datos
sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongodb
-
Accede al siguiente enlace: MongoDB Compass
-
Elige la última versión estable disponible.
-
En "Plataforma", selecciona la opción que corresponda a tu sistema operativo.
-
Descarga la aplicación.
-
Una vez descargado el archivo, accede a la carpeta de "Descargas" y arrastra el archivo recién descargado a la terminal para conocer la ruta del archivo.
-
En la terminal, ingresa el siguiente comando (esto solo aplica para Ubuntu, para otros sistemas operativos consulta la documentación oficial):
sudo dpkg -i <nombre_del_archivo.deb>
Debe verse de la siguiente forma:
-
Si el comando anterior muestra un error, ejecuta los siguientes comandos en orden:
sudo apt --fix-broken install
Este comando buscará las pre-dependencias necesarias para que la instalación sea exitosa.
Luego, repite el paso 6.
¡Listo! Ahora has instalado MongoDB Compass. 🎉
Si llegado el caso ocurre el siguiente error al darle click en Connect y la conexión es rechazada, sigue estos pasos:
-
Verifica la conexión 🔍
service mongod status
-
Activa la conexión 🔑
sudo systemctl start mongod
-
Vuelve al paso 1. Si la conexión funciona, ¡felicidades! Si no, busca en la documentación oficial de MongoDB o en la comunidad para obtener más ayuda. 🛠️🚀
Atlas es un servicio de base de datos en la nube. Permite alojar y administrar bases de datos sin la necesidad de configurar y mantener la infraestructura de servidores.
-
Facilidad de uso
-
Escalabilidad
-
Alta disponibilidad
-
Seguridad
-
Localizaciones globales
-
Integraciones
-
Automatización
-
Tarificación flexible
-
Accede al siguiente enlace: MongoDB Compass 🌐🔍
-
Elige la última versión estable disponible. 🚀🌟
-
En "Plataforma", selecciona la opción que corresponda a tu sistema operativo. ⚙️🖥️
-
Descarga la aplicación. 📥💻
-
Una vez descargado el archivo, accede a la carpeta de "Descargas" y arrastra el archivo recién descargado a la terminal para conocer la ruta del archivo. 📂🖱️
-
En la terminal, ingresa el siguiente comando (esto solo aplica para Ubuntu, para otros sistemas operativos consulta la documentación oficial):
sudo dpkg -i <nombre_del_archivo.deb>
Debe verse de la siguiente forma:
-
Si el comando anterior muestra un error, ejecuta los siguientes comandos en orden:
sudo apt --fix-broken install
Este comando buscará las pre-dependencias necesarias para que la instalación sea exitosa.
Luego, repite el paso 6. 🔄🔧
¡Listo! Ahora has instalado MongoDB Compass. 🎉🎉🎉
-
Ir a la página oficial 🌐
-
Iniciar sesión con Atlas 🔑
-
Click en el logo de atlas:
-
Click en New Proyect 🆕
-
Asignamos el nombre del proyecto y damos click en next 🏷️
-
Es opcional agregar permisos para miembros, pero para este ejemplo, nos saltaremos ese paso dándole click en Create Proyect 🤝
-
Click en Build a Database 🏗️
-
Seleccionamos el proveedor y la región a gusto
-
Nombramos nuestro Cluster.
📣 NOTA: No se puede cambiar el nombre del grupo luego de ser creado ❗
-
Click en Create 🆕
-
Asignamos un nombre y contraseña.
💢 LA CONTRASEÑA NO PUEDE TENER SÍMBOLOS 💢 🔐🚫❗
-
Click en Create User 👤
-
Click en Finish and Close 🚪
-
Click en Go to DataBases 📚
Listo, tu Base de datos fue instalada correctamente. 🎉
Para conectarte desde tu MongoDB Compass, realizaremos de nuevo el paso de Conexión 🔗🔍
Para ello, sigue los siguientes pasos:
-
Inicia sesión en MongoDB Atlas
-
Haz click en el menú izquierdo en el apartado de seguridad, específicamente donde dice Database Access:
-
Click en EDIT ✏️
-
Ubícate en Build and Role 🛠️
-
Click en Atlas Admin 👑
-
Ve al final del apartado y da click en Update User 🔄
Listo, ya hemos asignado permisos de administrador a un usuario. Ahora el usuario tiene privilegios de administrador en MongoDB Atlas. ✅
-
En tu navegador, inicia sesión con tu cuenta Atlas en la página oficial de MongoDB.
-
Accede a la opción Database. 🌐
-
Accede a la opción de Compass. 🔍
-
Selecciona todas las opciones que cumplan tus parámetros y sigue los pasos.
-
Copia el punto 2 de la siguiente imagen:
-
Pega el punto 3 en la aplicación de MongoDB Compass. 🔑
-
Cambia por tu contraseña.
-
Opcional: Darle click en FAVORITE y asignarle un color. 🌈
-
Activa la conexión dándole click en Connect. 🚀
-
-
Ubícate en el navbar lateral y ve a las opciones de seguridad (Security).
-
Click en Network Access.
-
Click en EDIT. 🔒 El objetivo de este paso es darle permiso a todas las IP para que tengan acceso a la base de datos siempre.
-
Click en ADD CURRENT IIP ADDRESS 🌐
Listo, ahora te podrás conectar desde cualquier lugar del mundo solo con tu cuenta de Atlas. 🌎
Los siguientes comandos aplican tanto para la terminal como para MongoDB Compass
db
: Muestra la base de datos que estás usando. 📌db.createCollection("<nombre_de_la_colección>")
: Crea una colección. 👨💻show databases
oshow dbs
: Muestra todas las bases de datos que tengan mínimo una colección dentro, si no hay, no la muestra. 👀use <database>
: Accede a la base de datos especificada y si no existe la crea. 👉db.<collection>.insertOne()
: Inserción simple de documentos. Ejemplo 📝db.<collection>.insertMany()
: Inserción de multiples documentos. Ejemplo 📚db.<collection>.find()
: Retorna todos los documentos de la colección especificada. Ejemplo 📄db.<collection>.find( { "field": "value" } )
: Selecciona todos los documentos siempre y cuandofield
sea igual avalue
. Ejemplo 🔑db.<collection>.updateOne()
: Actualiza un documento simple. Ejemplo ✏️db.<collection>.updateMany()
: Actualiza multiples documentos Ejemplo 📋db.<collection>.replaceOne()
: Remplaza un documento Ejemplo 🔄db.<collection>.deleteOne()
: Elimina un documento Ejemplo 🗑️db.<collection>.deleteMany()
: Elimina todos los documentos de una colección Ejemplo ❌
-
Inserta documentos simples en una colección. Si el documento no especifica un camapo
_id
, mongo crea uno que haga referencia a ese documento. 📥use sample_mflix db.movies.insertOne( { title: "The Favourite", genres: [ "Drama", "History" ], runtime: 121, rated: "R", year: 2018, directors: [ "Yorgos Lanthimos" ], cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ], type: "movie" } )
-
Inserta multiples documentos dentro de una colección contenidos por un array y separados por comas. Al igual que la inserción simple, si no se especifíca un campo
_id
, MongoDB lo agrega. 📄use sample_mflix db.movies.insertMany([ { title: "Jurassic World: Fallen Kingdom", genres: [ "Action", "Sci-Fi" ], runtime: 130, rated: "PG-13", year: 2018, directors: [ "J. A. Bayona" ], cast: [ "Chris Pratt", "Bryce Dallas Howard", "Rafe Spall" ], type: "movie" }, { title: "Tag", genres: [ "Comedy", "Action" ], runtime: 105, rated: "R", year: 2018, directors: [ "Jeff Tomsic" ], cast: [ "Annabelle Wallis", "Jeremy Renner", "Jon Hamm" ], type: "movie" } ])
-
Retorna todos los documentos de la colección especificada. en este caso
db.movies
🥂use sample_mflix db.movies.find()
Esta operación es igual en SQL a:
SELECT * FROM movies
-
Retorna todas las
movies
cuandotitle
sega igual aTitanic
use sample_mflix db.movies.find( { "title": "Titanic" } )
Equivalente en SQL a:
SELECT * FROM movies WHERE title = "Titanic"
-
Actualiza el primer documento encontrado en la colleción cuando
title
es igual aTwiligth
use sample_mflix db.movies.updateOne( { title: "Twilight" }, { $set: { plot: "A teenage girl risks everything–including her life–when she falls in love with a vampire." }, $currentDate: { lastUpdated: true } })
- Usamos el operador
$set
para actualizar el valor del campoplot
para la peliculaTwilight
- Usamos el operador
$currentDate
para actulizar el valor del campolastUpdated
para la fecha actual. Si el campolastUpdated
no existe.$currentDate
creará el campo.
- Usamos el operador
-
Actualiza todos los documentos de la colección cuando
security_deposit
es menor a100
use sample_airbnb db.listingsAndReviews.updateMany( { security_deposit: { $lt: 100 } }, { $set: { security_deposit: 100, minimum_nights: 1 } } )
El operador
$set
actualiza el valor del camposecurity_deposit
a100
y el valor del campominimun_nights
a1
. -
Remplaza el primer documento de la colección cuando
account_id: 371138
db.accounts.replaceOne( { account_id: 371138 }, { account_id: 893421, limit: 5000, products: [ "Investment", "Brokerage" ] } )
Para leerlo puedes utilizar
findOne
como en el ejemplo:db.accounts.findOne( { account_id: 893421 } )
-
Para eliminar todos los documentos de una colección, basta con pasar el parámetro de
deleteMany()
vacío.use sample_mflix db.movies.deleteMany({})
-
Para eliminar todos los documentos de la colección cuando
title
sea igual a"Titanic"
use sample_mflix db.movies.deleteMany( { title: "Titanic" } )
-
Elimina el primer documento que coincida con la condición
use sample_mflix db.movies.deleteOne( { cast: "Brad Pitt" } )
Esquema Json es un vocabulario que le permite anotar y validar documentos JSON. Puede usar el esquema JSON para especificar las reglas de validación para los campus en un formato legible para humanos. 📄👀
No puedes especificar un esquema de validación para:
- Colecciones en las bases de datos admin, local y config
-
Crear una colección estudiantes y usar el operador $jsonSchema para establecer las reglas del esquema de validación. 🏗️🧱
db.createCollection("students", { validator: { $jsonSchema: { bsonType: "object", title: "Student Object Validation", required: [ "address", "major", "name", "year" ], properties: { name: { bsonType: "string", description: "'name' must be a string and is required" }, year: { bsonType: "int", minimum: 2017, maximum: 3017, description: "'year' must be an integer in [ 2017, 3017 ] and is required" }, gpa: { bsonType: [ "double" ], description: "'gpa' must be a double if the field exists" } } } } } )
-
db.createCollection('tu-coleccion') : Crea la colección, en la cual vamos a trabajar.
-
validator : Se utiliza para validar la colección, y asegurar que los documentos insertados cumplan las reglas y restricciones configuradas.
-
$jsonSchema : Es el operador que especifica que trabajaremos con datos del tipo JSON.
-
bsonType : Especifica que los documentos deben ser de tipo objeto (Objetos BSON).
-
title : Título descriptivo para el esquema de validación tipo JSON.
-
required : Indica los campos que son obligatorios para la inserción del documento.
-
properties : Define las propiedades y restricciones que deben tener los campos del documento.
En properties incluiremos todos los campos que necesitemos validar, se incluirán como objetos y tendrán varios valores los cuales definirán las restricciones de ese campo en específico.
Estas son algunas de las restricciones que nos podemos encontrar en esos campos:
-
bsonType: Especifica el tipo de dato esperado para la propiedad.
-
required: Indica que la propiedad es obligatoria y debe estar presente en el documento.
-
minimum: Establece el valor mínimo permitido para la propiedad numérica.
-
maximum: Establece el valor máximo permitido para la propiedad numérica.
-
minLength: Define la longitud mínima permitida para una cadena de caracteres.
-
maxLength: Define la longitud máxima permitida para una cadena de caracteres.
-
enum: Especifica un conjunto de valores válidos que puede tener la propiedad.
-
pattern: Define una expresión regular que la propiedad debe cumplir.
-
description: Proporciona una descripción o comentario sobre la propiedad.
-
format: Define un formato específico que debe cumplir la propiedad (por ejemplo, "date-time" para fechas y horas en formato ISO 8601).
-
multipleOf: Especifica el múltiplo en el que un número debe estar.
-
minItems: Establece el número mínimo de elementos requeridos para una matriz.
-
maxItems: Establece el número máximo de elementos permitidos para una matriz.
-
uniqueItems: Indica si los elementos de una matriz deben ser únicos entre sí.
-
-
La siguiente operación inserta falla porque gpa es un integer (número entero) cuando el validator requiere un double (número flotante de doble precisión, como por ejemplo: 3.1416). 🛑🚫
db.students.insertOne( { name: "Alice", year: Int32( 2019 ), major: "History", gpa: Int32(3), address: { city: "NYC", street: "33rd Street" } } )
La operación retorna el error:
MongoServerError: Document failed validation
-
La inserción tiene éxito luego de cambiar el tipo del valor del campo gpa a double. 🎉🙌
db.students.insertOne( { name: "Alice", year: NumberInt(2019), major: "History", gpa: Double(3.0), address: { city: "NYC", street: "33rd Street" } } )
-
Para confirmar que el documento ha sido insertado satisfactoriamente, consulta la colección de students. 🧐🔍
db.students.find()
MongoDB retorna el documento insertado:
[ { _id: ObjectId("62bb413014b92d148400f7a5"), name: 'Alice', year: 2019, major: 'History', gpa: 3, address: { city: 'NYC', street: '33rd Street' } } ]