Los patrones de modelado en MongoDB son técnicas y estrategias utilizadas para diseñar la estructura de las colecciones y documentos de una base de datos. Debido a que MongoDB es una base de datos NoSQL orientada a documentos, no utiliza tablas y relaciones estrictas como las bases de datos relacionales, por lo que el diseño de los datos es fundamental para obtener un buen rendimiento y escalabilidad.
El objetivo de estos patrones es optimizar las consultas, reducir operaciones costosas, mejorar la velocidad de lectura y escritura, y facilitar el mantenimiento de la información.
Patrón Embebido (Embedded Documents)
Consiste en almacenar documentos relacionados dentro de un mismo documento principal. Es uno de los patrones más utilizados en MongoDB porque permite obtener toda la información en una sola consulta.
Ventajas
- Menor cantidad de consultas.
- Mayor rendimiento en lecturas.
- Datos relacionados agrupados.
Ejemplo
Una tienda en línea donde cada cliente almacena sus direcciones dentro de su propio documento.
{
"_id": 1,
"nombre": "Oscar",
"email": "oscar@email.com",
"direcciones": [
{
"tipo": "casa",
"ciudad": "Bogotá",
"pais": "Colombia"
},
{
"tipo": "trabajo",
"ciudad": "Medellín",
"pais": "Colombia"
}
]
}
Patrón de Referencias (References)
Cuando los datos crecen demasiado o deben compartirse entre varios documentos, es recomendable almacenar únicamente una referencia al documento relacionado.
Ventajas
- Evita duplicación excesiva de datos.
- Facilita las actualizaciones.
- Permite manejar grandes volúmenes de información.
Ejemplo
Colección de usuarios:
{
"_id": 1,
"nombre": "Oscar"
}
Colección de pedidos:
{
"_id": 100,
"fecha": "2026-06-10",
"usuario_id": 1
}
Patrón de Subconjunto (Subset Pattern)
Se utiliza cuando un documento contiene mucha información pero normalmente solo se consulta una pequeña parte. Los datos más utilizados permanecen en el documento principal y los menos frecuentes se almacenan aparte.
Ejemplo
Una tienda de productos donde la información básica está en el documento principal y las reseñas en otra colección.
{
"_id": 1,
"nombre": "Laptop",
"precio": 3500,
"stock": 20
}
Las reseñas pueden almacenarse en otra colección para evitar documentos demasiado grandes.
Patrón de Atributo (Attribute Pattern)
Permite manejar atributos dinámicos cuando los documentos pueden tener diferentes características.
Es muy útil para catálogos de productos con propiedades variables.
Ejemplo
{
"_id": 1,
"nombre": "Smartphone",
"atributos": [
{
"nombre": "color",
"valor": "negro"
},
{
"nombre": "memoria",
"valor": "256GB"
}
]
}
Patrón Computado (Computed Pattern)
Se utiliza para almacenar resultados calculados previamente y evitar ejecutar operaciones costosas repetidamente.
Ejemplo
Guardar el total de ventas calculado en lugar de recalcularlo constantemente.
{
"_id": 1,
"producto": "Laptop",
"ventas_totales": 450,
"ingresos_totales": 1575000
}
Patrón Bucket
Agrupa múltiples registros relacionados dentro de un único documento para mejorar el rendimiento y reducir la cantidad de documentos almacenados.
Es muy utilizado en datos de sensores, métricas y series temporales.
Ejemplo
{
"_id": "sensor_01_2026_06_10",
"sensor": "sensor_01",
"lecturas": [
{
"hora": "10:00",
"temperatura": 25
},
{
"hora": "10:05",
"temperatura": 26
}
]
}
Patrón Polimórfico (Polymorphic Pattern)
Permite almacenar diferentes tipos de documentos en una misma colección cuando comparten ciertas características.
Ejemplo
{
"_id": 1,
"tipo": "automovil",
"marca": "Toyota",
"puertas": 4
}
{
"_id": 2,
"tipo": "motocicleta",
"marca": "Yamaha",
"cilindraje": 250
}
Patrón Outlier
Se utiliza cuando la mayoría de documentos tienen una estructura similar, pero algunos contienen una cantidad excepcionalmente grande de información.
Los datos inusualmente grandes se almacenan en una colección separada para evitar afectar el rendimiento general.
Ejemplo
Una publicación de blog normalmente tiene pocos comentarios, pero una publicación viral puede tener miles. Los comentarios masivos se almacenan aparte.
Patrones de Árbol (Tree Patterns)
MongoDB ofrece varios enfoques para almacenar estructuras jerárquicas como categorías y menús.
Parent Reference
{
"_id": 2,
"nombre": "Laptops",
"parent": 1
}
Child Reference
{
"_id": 1,
"nombre": "Electrónica",
"hijos": [2,3,4]
}
Materialized Path
{
"_id": 2,
"nombre": "Laptops",
"ruta": ",Electronica,Laptops,"
}
Buenas Prácticas de Modelado
- Diseñar pensando en las consultas más frecuentes.
- Priorizar lecturas rápidas cuando la aplicación sea orientada a consultas.
- Evitar documentos excesivamente grandes.
- Utilizar documentos embebidos cuando los datos se consulten juntos.
- Utilizar referencias cuando los datos sean compartidos o crezcan constantemente.
- Crear índices adecuados para los campos más consultados.
- Aprovechar los patrones oficiales de MongoDB según el caso de uso.
Conclusión
Los patrones de modelado en MongoDB son fundamentales para diseñar bases de datos eficientes. Los más utilizados son Embedded Documents y References, pero existen otros patrones avanzados como Attribute, Bucket, Computed, Outlier y Polymorphic que ayudan a resolver problemas específicos de rendimiento y escalabilidad. La elección correcta depende principalmente de cómo la aplicación consulta y actualiza los datos, ya que en MongoDB el diseño se basa en los patrones de acceso más que en la normalización tradicional de las bases de datos relacionales.