MongoDB
MongoDB es una base de datos NoSQL orientada a documentos diseñada para gestionar grandes volúmenes de datos no estructurados de manera eficiente. Desde su lanzamiento en 2009, se ha convertido en una de las bases de datos más populares debido a su flexibilidad, escalabilidad y capacidad para trabajar con datos que no se ajustan al modelo relacional tradicional.
En lugar de utilizar tablas y filas como en las bases de datos relacionales, MongoDB organiza los datos en colecciones y documentos. Los documentos están formateados en JSON o BSON, lo que permite una representación flexible de la información. Esta estructura facilita el almacenamiento y la recuperación de datos complejos y heterogéneos.
A diferencia de las bases de datos relacionales, MongoDB no impone un esquema rígido. Esto significa que los desarrolladores pueden almacenar datos con formatos variados dentro de la misma colección, adaptándose fácilmente a aplicaciones que evolucionan rápidamente o que necesitan manejar datos dinámicos y en constante cambio. Esto lo convierte en una opción ideal para proyectos modernos que demandan agilidad y escalabilidad.

Estructura
En MongoDB, los datos se organizan en una estructura jerárquica que consta de bases de datos, colecciones y documentos:
Bases de datos: Una base de datos en MongoDB es el nivel más alto de organización. Dentro de una base de datos, se pueden crear múltiples colecciones para diferentes conjuntos de datos relacionados.Colecciones: Una colección es el equivalente a una tabla en las bases de datos relacionales. Contiene múltiples documentos que comparten un propósito común, aunque no tienen que tener el mismo esquema.Documentos: Los documentos son las unidades fundamentales de datos en MongoDB. Se almacenan en formato BSON (Binary JSON) y suelen representarse como objetos JSON. Cada documento es una estructura flexible que puede incluir diferentes campos y tipos de datos.

Tipos de datos
MongoDB admite una amplia variedad de tipos de datos para representar información compleja y diversa. Algunos de los tipos más comunes incluyen:
Cadenas de texto String: Almacena texto en formato UTF-8, ideal para nombres, descripciones, y otros campos de texto.Números Integer: Almacena números enteros de varios tamaños según la implementación.Double: Almacena números con punto flotante, útiles para datos como precios o mediciones.Fechas Date: Almacena datos de tiempo con soporte para operaciones avanzadas.Booleanos Boolean: Representa valores de verdadero o falso.Datos binarios BinData: Almacena datos binarios como imágenes o archivos comprimidos.

Características principales

Consultas
Consultas CRUD (Create, Read, Update, Delete)
Estas operaciones están relacionadas con la manipulación de los datos dentro de las colecciones. Los comandos CRUD permiten crear, leer, actualizar y eliminar documentos.
INSERT FIND UPDATE DELETE
Este comando inserta un nuevo documento en la colección empleados. El documento contiene los campos nombre, apellido, salario y departamento, con valores específicos para un empleado. En términos generales, esta operación agrega un nuevo registro a la colección de empleados en la base de datos.
Esta consulta encuentra todos los documentos en la colección empleados donde el salario es mayor a 5000. La operación extrae todos los documentos que cumplen con el criterio especificado, mostrando la información de esos empleados.
Este comando actualiza el documento del empleado con nombre 'Carlos' en la colección empleados, estableciendo un nuevo salario de 5500. La operación modifica solo el salario del documento que cumple con el criterio de búsqueda.
Este comando elimina el documento del empleado con nombre 'Carlos' de la colección empleados. La operación borra por completo el documento que cumple con el criterio de búsqueda.
Consultas de agregación
MongoDB también ofrece una poderosa función de agregación que permite realizar operaciones complejas en los datos, como filtrado, clasificación y agrupación.
AGGREGATE
Esta operación utiliza el comando aggregate para filtrar primero los empleados del departamento 'Finanzas' y luego calcular el salario promedio de ese departamento. La operación de agregación es útil para obtener resúmenes y métricas de los datos almacenados.
Consultas de definición de colecciones
MongoDB permite definir colecciones dentro de la base de datos, lo que permite estructurar los datos y las operaciones sobre ellos.
CREATE DROP
Este comando crea explícitamente una colección llamada 'empleados'. En MongoDB, las colecciones son flexibles y no requieren una definición rígida, como en SQL, por lo que la estructura de los documentos puede variar.
Este comando elimina la colección empleados de la base de datos. Todos los documentos almacenados en esa colección se perderán, y la colección dejará de existir.
Consultas de control de acceso
MongoDB permite definir roles y permisos para controlar el acceso a las bases de datos y las colecciones.
GRANT REVOKE
Este comando otorga el rol 'readWrite' en la base de datos 'empresa' al usuario 'usuario1'. Esto le permitirá al usuario leer y escribir documentos en esa base de datos.
Este comando revoca el rol 'readWrite' en la base de datos 'empresa' para el usuario 'usuario1'. Después de esta operación, el usuario ya no podrá realizar operaciones de lectura y escritura en esa base de datos.

Funciones y Operadores
En MongoDB, las funciones y operadores permiten realizar transformaciones y cálculos en los datos, así como filtrar, ordenar o modificar documentos de manera eficiente. Similar a SQL, las funciones en MongoDB pueden clasificarse en dos tipos principales: funciones de agregación y funciones escalares. Estas son útiles para el análisis, transformación y manipulación de datos dentro de las consultas.
Funciones de Agregación
Las funciones de agregación en MongoDB operan sobre conjuntos de datos y devuelven un único valor o conjunto procesado. Se utilizan dentro de una operación de agregación como el pipeline de agregación.
$sum: Suma los valores de un campo numérico.$avg: Calcula el promedio de los valores de un campo.$count: Cuenta el número de documentos en una agrupación.$min y $max: Encuentran el valor mínimo o máximo dentro de un conjunto de valores.
Operadores Lógicos en MongoDB
En MongoDB, los operadores lógicos son fundamentales para construir consultas avanzadas y filtrar documentos según condiciones específicas. Estos operadores permiten combinar múltiples criterios y realizar evaluaciones complejas dentro de una consulta.
$and: Evalúa múltiples expresiones y devuelve los documentos que cumplen con todas las condiciones especificadas. Es útil para filtrar documentos que deben cumplir varios criterios simultáneamente.$or: Devuelve los documentos que cumplen al menos una de las condiciones especificadas. Es ideal para búsquedas donde cualquier de los criterios sea suficiente.$nor: Devuelve los documentos que no cumplen ninguna de las condiciones especificadas. Es la combinación lógica de "not" y "or".$not: Invierte la condición de un operador y devuelve los documentos que no cumplen el criterio especificado. Generalmente se utiliza dentro de expresiones de comparación.$expr: Permite usar expresiones de agregación para realizar operaciones lógicas directamente en la consulta.
Estas funciones se utilizan dentro de la etapa $group
del pipeline de agregación para realizar cálculos sobre los datos agrupados.
Funciones Escalares
A diferencia de las funciones de agregación, las funciones escalares operan sobre un único documento o fila. Se aplican a cada documento individualmente y retornan un valor basado en los datos de ese documento.
$toLower y $toUpper: Convierte cadenas de texto a minúsculas o mayúsculas.$concat: Une dos o más cadenas de texto en una sola.$substr: Extrae una parte de una cadena de texto.$round: Redondea un número a un número específico de decimales.$currentDate: Devuelve la fecha y hora actual del sistema.
Estas funciones son útiles para la manipulación y el formateo de los datos dentro de la consulta.
Operadores
MongoDB también ofrece una variedad de operadores que se utilizan en las consultas para realizar comparaciones y cálculos. Algunos de los operadores más comunes incluyen:
$eq: Equivalente al operador de igualdad (=) en SQL.$ne: Distinto a (!=) en SQL.$gt: Mayor que (>) en SQL.$lt: Menor que (<) en SQL.$gte: Mayor o igual que (>=) en SQL.$lte: Menor o igual que (<=) en SQL.
Operadores aritméticos
$add: Suma dos o más valores.$subtract: Resta un valor de otro.$multiply: Multiplica dos o más valores.$divide: Divide un valor entre otro.+ , - , * , /: Operadores aritméticos para sumar, restar, multiplicar y dividir.

Consultas Avanzadas
$distinct $currentDate $inc $rename $set $unset $addToSet $addToSet con $each $pop $pull $push $unionWith $group $match $regex $regex $in $nin $or $subtract $divide $text $where $group
$distinct
se utiliza para devolver valores únicos de un campo en una colección. Por ejemplo:
Esta consulta recupera todos los departamentos únicos de la colección de empleados. Si dos o más empleados pertenecen al mismo departamento, este solo se mostrará una vez.
$currentDate
establece el valor de un campo como la fecha y hora actual. Por ejemplo:
Actualiza el campo ultimaActualizacion
con la fecha y hora actual.
$inc
incrementa un valor numérico de un campo. Por ejemplo:
Aumenta el saldo de la cuenta en 100 unidades.
$rename
cambia el nombre de un campo dentro de un documento. Por ejemplo:
Cambia el nombre del campo direccion
a direccionPostal
.
$set
establece un valor para un campo específico. Si el campo no existe, lo crea. Por ejemplo:
Establece el valor del campo categoria
a 'electronica'.
$unset
elimina un campo de un documento. Por ejemplo:
Elimina el campo descuento
del documento.
$addToSet
agrega un valor a un conjunto (array) si no está presente. Es ideal para agregar valores a un array sin duplicados. Por ejemplo:
$addToSet
también puede usarse con $each
para agregar múltiples valores a un array. Por ejemplo:
Esta consulta agrega "lectura", "cine" y "viajes" al array de intereses de "Maria", evitando duplicados.
Agrega el valor 'deportes' al array intereses
si no existe ya.
$pop
elimina el primer o último elemento de un array. Por ejemplo:
Elimina el último elemento del array intereses
.
$pull
elimina los elementos de un array que coinciden con una condición. Por ejemplo:
Elimina todos los elementos en el array intereses
que sean 'futbol'.
$push
agrega un valor al final de un array. Por ejemplo:
Agrega el valor 'videojuegos' al final del array intereses
.
$unionWith
combina los resultados de dos colecciones diferentes. Por ejemplo:
Esta consulta devuelve todos los empleados, combinando la colección de empleados con la colección de ex empleados.
$group
agrupa documentos por una o más claves y aplica una función de agregación. Por ejemplo:
Agrupa a los empleados por departamento y cuenta cuántos empleados hay en cada uno.
$match
filtra los documentos de acuerdo con una condición. Por ejemplo:
Devuelve todos los empleados cuya edad es mayor a 30.
$regex
se utiliza para buscar un patrón en un campo. Por ejemplo:
Esta consulta obtiene los empleados cuyos nombres comienzan con la letra "A". El símbolo ^ es un ancla que representa el inicio de la cadena.
$regex
permite realizar búsquedas de patrones complejos dentro de campos de texto utilizando expresiones regulares. Un ejemplo avanzado sería:
Este ejemplo busca artículos cuyo nombre no contenga las palabras 'fácil' ni 'rápido', usando una expresión regular avanzada con lookahead negativo.
$in
permite especificar múltiples valores en una condición. Por ejemplo:
Esta consulta obtiene los empleados que trabajan en los departamentos de Ventas o Marketing.
$nin
permite especificar múltiples valores en una condición. Por ejemplo:
Esta consulta obtiene los empleados que no trabajan en los departamentos de Ventas o Marketing.
$or
se utiliza para realizar una consulta con varias condiciones. Por ejemplo:
Esta consulta devuelve los empleados que tienen menos de 30 años o un salario superior a 50,000.
$subtract
se utiliza para restar valores. Por ejemplo, una triple resta:
Esta consulta calcula la ganancia restando los costos, impuestos y descuentos de los ingresos.
$divide
se utiliza para dividir valores. Por ejemplo:
Esta consulta calcula el promedio de ventas por cliente.
$text
permite realizar búsquedas de texto completo en campos indexados. Por ejemplo:
Busca artículos que contengan la palabra "tecnología" en campos indexados como titulo
o contenido
.
$where
permite evaluar una expresión JavaScript dentro de una consulta. Por ejemplo:
Encuentra productos cuyo precio sea mayor a 100, evaluando la condición en JavaScript.
$group
se utiliza para agrupar documentos en una consulta de agregación. Por ejemplo:
Esta consulta agrupa las ventas por vendedor, calcula el total y el promedio de ventas, y lista los productos vendidos por cada vendedor.
Estos operadores son solo una pequeña muestra de las capacidades que ofrece MongoDB para trabajar con datos. MongoDB permite crear consultas avanzadas y realizar análisis detallados de manera eficiente.

$aggregate Relaciones en MongoDB $lookup en MongoDB Operadores de Agregación en MongoDB
La función $aggregate
se utiliza para realizar operaciones avanzadas en MongoDB. Este ejemplo combina $match
, $group
y operadores como $sum
, $avg
y $push
:
db.ventas.aggregate([
{ $match: { fecha: { $gte: ISODate('2023-01-01'), $lt: ISODate('2024-01-01') } } },
{ $group: {
_id: '$vendedor',
total_ventas: { $sum: '$monto' },
promedio_ventas: { $avg: '$monto' },
productos_vendidos: { $push: '$producto' }
} },
{ $sort: { total_ventas: -1 } }
]);
Esta consulta filtra las ventas del año 2023, agrupa por vendedor, calcula el total y el promedio de ventas, y lista los productos vendidos por cada vendedor. Finalmente, ordena los resultados por el total de ventas en orden descendente.
MongoDB es una base de datos NoSQL que no utiliza tablas ni relaciones entre ellas, por lo que no tiene un concepto directo de "JOIN" como en SQL. Sin embargo, MongoDB ofrece una operación similar llamada $lookup
, que permite hacer uniones entre colecciones.
db.empleados.aggregate([
{
$lookup: {
from: "departamentos",
localField: "depto_id",
foreignField: "id",
as: "departamento_info"
}
}
]);
En esta consulta, $lookup
se usa para unir los documentos de la colección empleados
con los documentos de la colección departamentos
. La operación compara el campo depto_id
de la colección empleados con el campo id
de la colección departamentos. Los resultados se almacenan en un nuevo campo llamado departamento_info
dentro de cada documento de la colección empleados
.
$lookup
es el operador que permite realizar una especie de "join" entre colecciones en MongoDB. Si bien no es exactamente igual a un JOIN en SQL, permite combinar datos de diferentes colecciones en una sola consulta de agregación.
db.empleados.aggregate([
{
$lookup: {
from: "departamentos",
localField: "depto_id",
foreignField: "id",
as: "departamento_info"
}
},
{
$unwind: "$departamento_info"
},
{
$project: { "nombre": 1, "departamento_info.nombre": 1 }
}
]);
Este ejemplo utiliza $unwind
para desestructurar el array resultante del $lookup
, a fin de trabajar con los campos de la colección unida de manera más sencilla. Luego, el operador $project
permite seleccionar solo las columnas que queremos que aparezcan en el resultado, en este caso, el nombre del empleado y el nombre del departamento.
MongoDB ofrece varios operadores de agregación como $match
, $group
, $sort
, entre otros, que permiten realizar consultas complejas y manejar grandes volúmenes de datos de manera eficiente.
db.empleados.aggregate([
{
$match: { salario: { $gt: 50000 } }
},
{ $lookup: {
from: "departamentos",
localField: "depto_id",
foreignField: "id",
as: "departamento_info"
}
},
{
$unwind: "$departamento_info"
},
{
$project: { "nombre": 1, "departamento_info.nombre": 1 }
}
]);
En este ejemplo, usamos $match
para filtrar a los empleados que ganan más de 50,000 antes de hacer el $lookup
. Esto mejora la eficiencia al reducir los documentos que se procesan en el $lookup
y hace la consulta más rápida.

Instalación y Conexión a MongoDB
MongoDB es una base de datos NoSQL muy popular, especialmente utilizada en aplicaciones web modernas debido a su capacidad para manejar grandes volúmenes de datos no estructurados. En este tutorial, veremos cómo instalar MongoDB en tu máquina y cómo conectarte a ella usando la herramienta de línea de comandos de MongoDB.
Para instalar MongoDB en tu máquina, sigue los pasos según el sistema operativo que estés utilizando:
Descarga el instalador desde el sitio web oficial de MongoDB. Sigue las instrucciones del instalador para completar la instalación.
Descarga la shell desde el sitio web oficial de MongoDB.
Una vez que MongoDB esté instalado, puedes conectarte a él usando
Una vez conectado a MongoDB, puedes empezar a interactuar con tus bases de datos y colecciones. Si deseas salir de la shell de
Por defecto, MongoDB se conecta al puerto 27017. Este es el puerto predeterminado en el que MongoDB escucha para las conexiones entrantes. Si estás ejecutando MongoDB localmente, no necesitas especificar el puerto, ya que
Comandos Básicos en mongosh
Al estar dentro de la shell de mongosh
, puedes ejecutar comandos para interactuar con la base de datos. Algunos de los comandos más comunes son:
show dbs : Muestra todas las bases de datos disponibles en tu servidor MongoDB.use <nombre-db> : Cambia a una base de datos específica.show collections : Muestra las colecciones dentro de la base de datos seleccionada.db.<nombre-coleccion>.find() : Muestra todos los documentos en una colección específica.
Introducción a Mongoose
Mongoose es una biblioteca de JavaScript que facilita la interacción con MongoDB desde aplicaciones Node.js. Mongoose proporciona una solución basada en esquemas para trabajar con colecciones de datos, permitiendo un modelado más estructurado y controlado de los documentos.
Una vez que Mongoose esté instalado, puedes usarlo para conectarte a tu base de datos MongoDB. Aquí tienes un ejemplo de cómo establecer una conexión:
Este código establece una conexión a una base de datos MongoDB en el servidor local (localhost) y usa el puerto 27017 por defecto. Si la conexión es exitosa, se imprime el mensaje 'Conectado a MongoDB'. En caso de error, se muestra el mensaje de error en la consola.
Creando un Modelo con Mongoose
Una de las características principales de Mongoose es su sistema de modelos. Los modelos en Mongoose definen cómo se deben estructurar los documentos dentro de una colección de MongoDB. Aquí hay un ejemplo de cómo definir un modelo para un documento de empleado:
En este ejemplo, primero definimos un esquema para el modelo 'Empleado', indicando los campos 'nombre', 'edad' y 'departamento'. Luego, creamos un nuevo documento con este esquema y lo guardamos en la base de datos MongoDB.
Recursos
Si deseas profundizar más en MongoDB y Mongoose, puedes revisar la documentación oficial: