MongoDB
- MongoDB Curso, Introducción Practica a NoSQL
- mongodb ejemplos de codigo
- Databases
Introducción
- MongoDB es:
- escalable, con soporte nativo para clusters y replicación.
- orientado a documentos en formato JSON/BSON.
- escrito en C++ y optimizado para rendimiento.
- schema-less (permite documentos con estructura flexible).
- diseñado para escalado horizontal mediante sharding.
- de propósito general: adecuado para APIs, microservicios, IoT, analítica básica, logging, e-commerce.
- Ventajas clave:
- consultas ricas con operadores avanzados.
- integración natural con ecosistemas JavaScript.
- JSON como formato principal → curva de aprendizaje más rápida.
- drivers oficiales para múltiples lenguajes.
Instalación
- Instalar MongoDB Community Server.
- Instalar MongoDB Compass (cliente visual).
- Ejecutar la instalación sin configurarlo como servicio (opcional según necesidades).
- Añadir al PATH la carpeta
/bin. - Verificar instalación:
mongod --versionmongod.exe --version
Configuración Inicial
- Añadir variable de entorno apuntando a la carpeta
bin. - Crear carpeta para almacenamiento:
C:\data\db
- Iniciar el servidor:
mongod
- Mantener la ventana abierta con
mongodpara que el servidor siga activo. - Abrir otra consola para el cliente:
mongo
- Mongo shell funciona como un intérprete de JavaScript.
- Comprobar acceso:
- ejecutar funciones JS (
Math.sin,Date, funciones propias).
- ejecutar funciones JS (
Conceptos Básicos
- Base de datos: agrupación lógica de colecciones.
- Colección: conjunto de documentos relacionados, similar a tablas.
- Documento: objeto JSON/BSON con estructura flexible.
Mongo Shell (JS Interpreter)
- Comandos básicos:
- ver db actual:
db - listar dbs:
show dbs - ayuda:
db.help()
- ver db actual:
- Crear y usar bases de datos:
use webstore
- Crear colecciones:
db.products.insert({"name": "laptop"})show collections
- Eliminar una base de datos:
db.dropDatabase()
- Funcionalidades JS:
Math.sin(Math.PI / 2)new Date()- creación de funciones personalizadas
Funcionamiento de Colecciones
- Crear colecciones explícitas:
db.createCollection("users")db.createCollection("products")
- Borrar colecciones:
db.products.drop()
- Insertar documentos:
db.products.insert(<json>)
- Búsqueda:
db.products.find()db.products.find().pretty()
- BSON:
- JSON se transforma a BSON (binario eficiente).
- Expresiones regulares:
"x": /foobar/i
Operaciones Típicas (CRUD Avanzado)
- Insertar datos:
db.products.insert({"name": "keyboard"})db.products.insert({"name": "laptop", "price": 999.99})
- Buscar documentos:
db.products.find({name: "mouse"})db.products.find({price: 999.99})db.products.find({"tags":"computers"})db.products.findOne({"tags": "computers"})
- Proyecciones:
db.products.findOne({"tags": "computers"}, {"name": 1, "description": 1, "_id": 0})
- Ordenación:
db.products.find().sort({name: 1})
- Límites:
db.products.find().limit(2)
- Contar documentos:
db.products.count()
Uso de Funciones en Consultas
- Recorrer resultados:
db.products.find().forEach(product => print("Product Price: " + product.price))
- Actualizaciones:
- Reemplazo completo:
db.products.update({"name": "keyboard"}, {"price": 99.99})
- Uso de
$set:db.products.update({"name": "laptop"}, {$set: {"description": "lg gram laptop"}})
- Upsert:
db.products.update({"name": "desktop"}, {$set: {"description": "Gaming Desktop"}}, {upsert: true})
- Incrementos:
db.products.update({"name": "keyboard"}, {$inc: {"price": 0.01}})
- Renombrar atributos:
db.products.update({"name": "laptop"}, {$rename: {"name": "nombre"}})
- Reemplazo completo:
- Eliminaciones:
db.products.remove({"nombre": "keyboard"})db.products.remove({})(todos los documentos)
MongoDB Compass
- Cliente visual para interactuar con MongoDB.
- Conexión por defecto: puerto
27017. - Permite ver colecciones, insertar documentos y ejecutar consultas visualmente.
- El servidor debe estar ejecutándose con
mongod.
MongoDB — Conceptos Avanzados y Arquitectura
BSON y Tipos de Datos
- MongoDB almacena documentos en BSON, una representación binaria de JSON.
- Ventajas:
- más velocidad en la lectura/escritura.
- tipos adicionales no presentes en JSON.
- Tipos relevantes:
ObjectIdDateTimestampBinaryDecimal128- arrays, documentos anidados, regex.
Diseño de Documentos
- Dos enfoques:
- Embedding: incluir documentos dentro de otro documento → consultas rápidas.
- Referencing: enlazar documentos mediante IDs → útil para conjuntos grandes y relaciones flexibles.
- Consideraciones:
- documentos demasiado grandes degradan el rendimiento.
- mejor desnormalizar cuando se prioriza la lectura.
Índices
- Principales tipos:
- Índices simples: un solo campo.
- Índices compuestos: varios campos, con orden específico.
- Índices únicos: no permite duplicados.
- Índices TTL: eliminan documentos automáticamente tras un tiempo.
- Índices de texto: búsquedas semánticas.
- Índices geoespaciales: admite coordenadas y mapas.
- Índices parciales: solo indexan documentos que cumplen una condición.
- Índices sparse: ignoran campos inexistentes.
Consultas Avanzadas
- Comparaciones:
$gt,$lt,$gte,$lte,$eq,$ne.
- Arrays:
$elemMatch,$size,$all.
- Operadores lógicos:
$and,$or,$nor,$not.
- Expresiones regulares avanzadas usadas en búsquedas flexibles.
Aggregation Framework
- Sistema similar a pipelines tipo SQL:
$match: filtrar.$project: seleccionar campos.$group: agrupaciones y sumatorias.$sort: ordenar.$unwind: expandir arrays.$lookup: realizar joins con otras colecciones.$facet: múltiples pipelines en paralelo.
- Usado para:
- reportes,
- dashboards,
- resúmenes,
- análisis avanzado.
Ejemplo de Aggregation
db.sales.aggregate([
{ $match: { status: "paid" }},
{ $group: { _id: "$seller", total: { $sum: "$amount" }}},
{ $sort: { total: -1 }}
])
`
Transacciones y ACID
-
Desde MongoDB 4.0:
- Permite transacciones multi-documento en replica sets.
- Lecturas/escrituras atomizadas.
-
Útil para:
- operaciones financieras,
- integridad fuerte en varias colecciones.
Replicación (Replica Sets)
- Un replica set contiene:
- un primary
- uno o varios secondary
- opcionalmente un arbiter (solo participa en votaciones).
- Beneficios:
- tolerancia a fallos,
- lecturas distribuídas.
- Configuraciones avanzadas:
- ajustar prioridades para decidir qué nodo es elegible como primary,
- crear nodos retrasados (delayed) para recuperación histórica,
- elegir read concern y write concern según consistencia.
Sharding
- Estrategia para escalar horizontalmente.
- Componentes:
- mongos: router de consultas.
- config servers: almacenan metadatos.
- shards: conjuntos de datos distribuidos.
- Métodos de particionamiento:
- rangos: adecuado si los valores tienen una distribución uniforme.
- hash: balanceo automático más uniforme.
- Shard key adecuada:
- evita hotspots,
- distribuye cargas de forma estable.
Seguridad
- MongoDB implementa:
- autenticación por usuario/contraseña,
- roles con permisos específicos,
- encriptación TLS en tránsito,
- encriptación en reposo mediante claves KMS o integraciones con Atlas,
- auditoría para entornos de producción.
Herramientas del Ecosistema
- MongoDB Atlas: servicio en la nube con backups, métricas, escalado automático y funciones serverless.
- mongodump/mongorestore: backups binarios.
- mongoexport/mongoimport: importación/exportación JSON/CSV.
- mongosh: shell moderno reemplazando a
mongo. - Drivers oficiales: Node.js, Python, Go, Java, C#, Rust…
- Mongoose (Node.js):
- ODM para modelar schemas,
- middlewares,
- validaciones.
Patrones de Modelado NoSQL
- Bucket Pattern: ideal para logs o streams.
- Subset Pattern: guardar solo parte de un conjunto grande.
- Computed Pattern: almacenar datos calculados para acelerar lecturas.
- Tree Patterns: representación de jerarquías.
- Outlier Pattern: separar elementos que rompen el tamaño típico del documento.
MongoDB — Arquitectura, Patrones y Casos de Uso Exhaustivos
Arquitectura — Componentes y Fundamentos
- Componentes principales:
- mongod — proceso servidor que almacena datos y atiende consultas.
- mongos — router de consulta en clusters sharded; actúa como puerta de enlace.
- Config Servers — almacenan metadatos del cluster sharded (topología, chunks).
- Clients / Drivers — conexiones desde apps (drivers oficiales y ORMs/ODMs).
- Flujo de operaciones:
- Cliente → mongos (si hay sharding) → shard(s) / replica set primary → escritura en
oplog→ replicación a secondaries.
- Cliente → mongos (si hay sharding) → shard(s) / replica set primary → escritura en
- Otras piezas:
- OpsLog (oplog) — registro de operaciones para replicación.
- Journaling — durabilidad a nivel de servidor (WiredTiger journaling).
- Storage Engine (WiredTiger por defecto, In-Memory opcional).
Storage Engines y Persistencia
- WiredTiger:
- MVCC (versiones múltiples) → mayor concurrencia.
- Compresión configurable (snappy, zlib, zstd).
- Buen rendimiento en escritura/escritura concurrente.
- In-Memory Engine:
- Datos residen en RAM, uso en casos de latencia ultra baja.
- No persistente por defecto (útil para caches o pruebas).
- Consideraciones:
- Tamaño máximo de documento (16MB).
- Limitaciones del tamaño de la base de datos por recursos del nodo.
Replicación (Replica Sets) — Alta Disponibilidad
- Conceptos:
- Réplica compuesta por un primary (lee/escribe) y múltiples secondaries (replican).
- Arbiter participa en votaciones pero no guarda datos.
- Read/Write Concerns:
w(write concern): numero de réplicas que deben confirmar.wtimeoutymajoritypara garantías fuertes.readPreference:primary,primaryPreferred,secondary,nearest.
- Consideraciones de diseño:
- Nodos en distintas zonas/centros para resiliencia.
- Nodos delayed para proteger contra eliminación accidental (p.ej. delay: 86400s).
- Prioridades para control de elecciones.
Oplog y Consistencia
- Oplog:
- Cola capped que registra operaciones en el primary.
- Secondaries reproducen el oplog para alcanzar consistencia eventual.
- Consistencia:
- Lecturas desde
primary→ más consistencia. - Lecturas desde
secondary→ latencia reducida pero posible retraso (staleness).
- Lecturas desde
Sharding — Escalado Horizontal
- Elementos:
- Shards: cada shard puede ser un replica set.
- mongos: router que transparently reparte queries.
- config servers: normalmente 3 nodos (replica set) que guardan metadata.
- Selección de Shard Key:
- Debe distribuir uniformemente la carga.
- Evitar keys monotonas (timestamp, _id incrementales) que generan hotspots.
- Considerar cardinalidad, frecuencia de consulta, y uso en filtros.
- Estrategias:
- Rango (range sharding): bueno para queries por rango pero riesgo de hotspots.
- Hash (hashed sharding): balanceo más uniforme, peor para rangos.
- Rebalanceo:
- Micro-movimientos de chunks entre shards.
- Impacto en I/O y red; planificar mantenimiento.
Seguridad, Networking y Operaciones
- Autenticación:
- SCRAM, x.509, LDAP integrable.
- Autorización:
- Roles basados en privilegios (built-in roles + roles personalizados).
- Encriptación:
- TLS/SSL en tránsito.
- Encriptación en reposo: en disco (proveedores KMS para llaves).
- Auditoría y cumplimiento:
- Logging de eventos, retención y conservación para auditoría.
- Networking:
- Abrir puertos mínimos (27017, 27019, 27018 según roles).
- Whitelists / VPC para limitar accesos.
- Backups:
- Snapshots del filesystem (si storage engine lo permite).
mongodump/mongorestorepara migraciones y backups lógicos.- Backups consistentes en cluster sharded o Atlas snapshots.
Monitorización y Observabilidad
- Métricas importantes:
- Latencia de operaciones, QPS, uso CPU/RAM, I/O disco, lock percentage.
- Herramientas:
- MongoDB Cloud Manager / Ops Manager / Atlas Monitoring.
- Integraciones con Prometheus, Grafana.
- Logs y slow query profiler (
db.system.profile).
Código: Iniciar Replica Set (ejemplo)
Iniciar Replica Set (shell)
// en cada nodo mongod (con --replSet rs0) y luego en shell:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017" }
]
})
`
Código: Habilitar Sharding en DB y Colección (ejemplo)
Habilitar Shard y Shard Key (mongos)
sh.enableSharding("commerce")
sh.shardCollection("commerce.orders", { "customerId": "hashed" })
Patrones de Modelado — Descripción y Ejemplos
- Principios generales:
- Priorizar patrones según los requerimientos de lectura/escritura y consistencia.
- Evaluar trade-offs: duplicación (desnormalización) vs consistencia y costos de actualización.
Embedding vs Referencing
- Embedding: almacenar subdocumentos dentro del documento padre.
- Pros:
- Lecturas atómicas y rápidas (1 consulta).
- Simplicidad conceptual.
- Contras:
- Documentos pueden crecer demasiado (> 16MB).
- Actualizaciones parciales más costosas si se repite en muchos documentos.
- Pros:
- Referencing: guardar referencias (ObjectId) a otros documentos.
- Pros:
- Evita documentos enormes.
- Mejor para relaciones N:N y colecciones grandes.
-
Contras:
- Requiere múltiples queries o
$lookup.Pattern: Bucket (time-series / logs)
- Requiere múltiples queries o
- Pros:
- Agrupa eventos por intervalos (por ejemplo, por día o por hora) dentro de un documento para reducir número de documentos.
- Uso: métricas, telemetría, logs.
- Consideración: tamaño del bucket (no superar límites de documento).
Pattern: Subset / Partial Aggregation
- Guardar solo los campos más consultados o una vista parcial para acelerar queries frecuentes.
- Ideal cuando el documento original es grande pero las consultas requieren solo un subconjunto.
Pattern: Outlier
- Separar documentos que no encajan en el esquema “típico” (outliers) a otra colección para mantener tamaños y rendimiento.
Pattern: Computed/Pre-Aggregation
- Guardar valores calculados (totales, contadores) para evitar cálculos pesados en cada lectura.
- Requiere estrategia de actualización (triggers de aplicación o transacciones).
Pattern: Tree / Jerarquías
- Adjacency List:
- Cada nodo contiene
parentId. Fácil de mantener, consultas recursivas costosas.
- Cada nodo contiene
- Materialized Path:
- Guardar ruta completa en un campo (
"path": "root/child/grandchild"). Fácil filtrado por prefijo.
- Guardar ruta completa en un campo (
- Nested Sets:
- Representación con
lft/rgt, ideal para lecturas de subárboles, costoso en escrituras. - Elegir según patrón de lecturas vs escrituras.
- Representación con
Pattern: Versioning / Audit Trail
- Mantener versiones históricas de documentos (copias o snapshots).
- Uso en compliance y auditoría.
Pattern: Time-Series (específico)
- Usar colecciones con bucket pattern o Timeseries Collections (feature nativa en versiones recientes).
- Ventajas: compresión especializada y consultas optimizadas por tiempo.
Pattern: Leaderboard / Counters
- Uso de documentos con contadores (
$inc) y sharding por ranges/hashed para escalar. - Considerar limitaciones de concurrencia en hotspots.
Ejemplos de Código: Aggregation para Patrones Comunes
Aggregation — Top Sellers por Mes
db.orders.aggregate([
{ $match: { status: "paid", date: { $gte: ISODate("2025-01-01") } } },
{ $group: { _id: { seller: "$sellerId", month: { $month: "$date" } }, total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 10 }
])
Casos de Uso y Recomendaciones de Patrones
- E-commerce (catálogo, orders, carritos):
- Catálogo: usar embedding para atributos pequeños; referencing para relaciones complejas (reviews, suppliers).
- Orders: documentos por order (embedding items) + computed totals; replica sets para HA.
- Sharding por
customerIdoorderDate(evitar hotspot si es secuencial).
- Sistemas de logging y métricas (telemetría, IoT):
- Bucket pattern o Time-Series Collections; compresión y TTL para retención.
- Redes sociales / Feed:
- Denormalizar actividad (write-heavy): Precompute feeds o fan-out on write.
- Graph-like queries limitados; considerar DB especializada (graph DB) para queries profundas.
- Geolocalización / Geospatial:
- Índices 2dsphere, consultas por proximidad; shards por regiones si necesario.
- Gaming (estadísticas, leaderboards):
- Contadores con
$inc, TTL para datos efímeros, shard por region/gameId.
- Contadores con
- Catalog/Content Management:
- Flexibilidad de esquema para múltiples tipos de contenido; indexing de texto y facets.
- Financial / Transaccional (banking):
- Usar transacciones multi-documento y replica sets con
majoritywrite concern.
- Usar transacciones multi-documento y replica sets con
- Analítica y BI:
- Pipeline de aggregation,
$lookuppara combinar datasets, export a data warehouse cuando se requiera consultas complejas.
- Pipeline de aggregation,
Operaciones y Prácticas Recomendadas (Best Practices)
- Diseñar shard key antes de la fase de crecimiento serio.
- Monitorizar índices y eliminar índices sin uso.
- Usar
w: "majority"para operaciones críticas. - Mantener replica sets en 3+ nodos (o 5 para tolerancia mayor).
- Automatizar backups y pruebas de restore.
- Probar failover y recuperación periódicamente.
- Mantener métricas y alertas para latencia, conexiones y uso de locks.
Recursos y Referencias
- Considerar migración a MongoDB Atlas para manejo operativo (backups automáticos, autoscaling).
- Herramientas de utilidad:
mongodump,mongorestore,mongoexport,mongoimport,mongotop,mongostat.
Fundamentos y Conceptos Clave de MongoDB
Introducción
MongoDB es un Sistema de Gestión de Bases de Datos NoSQL orientado a documentos, diseñado para manejar datos semiestructurados, distribuidos y altamente escalables.
A diferencia de los modelos relacionales, en MongoDB los datos se almacenan como documentos BSON, permitiendo flexibilidad estructural, escalabilidad horizontal nativa y consultas ricas incluso sin esquema rígido.
Esta nota recoge los fundamentos teóricos esenciales que forman la base conceptual de MongoDB.
1. Modelo de Datos en MongoDB
1.1 Documento
Unidad fundamental de almacenamiento:
- Formato BSON (Binary JSON).
- Permite tipos extendidos: fechas, binarios, ObjectId, enteros de 64 bits, decimal128.
- Soporte nativo para:
- Subdocumentos.
- Arrays.
- Tipos heterogéneos.
1.2 Colección
Conjunto de documentos relacionados:
- No requieren esquema fijo.
- Pueden contener documentos parcialmente distintos.
- Equivalente conceptual a una “tabla”, pero sin tipado estricto.
1.3 Base de Datos
Agrupa colecciones lógicamente, con espacio de nombres propio.
2. Esquema Flexible
2.1 Flexibilidad del Esquema
- No existe un esquema rígido.
- Permite evolucionar los datos sin migraciones masivas.
- Implica diseñar con intención, aunque sea flexible.
2.2 Embedding
Se recomienda embeber cuando:
- Relación 1:1 o 1:N con tamaño acotado.
- Se requiere lectura rápida en una sola operación.
- La consistencia depende del mismo documento.
2.3 Referencing
Recomendado para:
- Relaciones N:M.
- Volumen grande de datos o crecimiento indefinido.
- Necesidad de reutilizar entidades en múltiples documentos.
2.4 Anti-Patrones
- Documentos que superan límites lógicos (>16 MB).
- Arrays infinitos.
- Crecimiento continuo del documento principal.
- Demasiadas referencias entre colecciones.
3. Relaciones en MongoDB
3.1 1:1
Embedding casi siempre recomendable.
3.2 1:N
- Embedding si el tamaño es moderado.
- Referencing si crece de forma ilimitada o si los hijos cambian mucho.
3.3 N:M
Soluciones comunes:
- Documentos puente.
- Referencias duales.
$lookupen agregaciones.
4. Índices
4.1 B-Trees
Índice general para la mayoría de consultas.
4.2 Multikey
- Indexa arrays.
- Cada valor del array se indexa independientemente.
4.3 Text Index
- Búsqueda por relevancia.
- Stemming.
- Idioma configurable.
4.4 Geo Index
2dsphere y 2d:
- Cercanía (near).
- Polígonos, intersecciones.
- GeoJSON nativo.
4.5 TTL Index
Elimina documentos automáticamente tras un tiempo.
4.6 Índices para Sharding
Necesarios para claves de shard distribuidas.
5. Fundamentos del Motor Interno
5.1 WiredTiger
- Compresión.
- MVCC.
- Checkpoints.
- Concurrencia optimizada a nivel documento.
5.2 BSON
- Binario.
- Rápida serialización/deserialización.
- Tipos extendidos optimizados.
5.3 Límite de Documento
16 MB por documento:
- Evita fragmentación extrema.
- Favorece patrones de diseño correctos.
6. CRUD y Operadores
6.1 CRUD
insertOne,insertManyfind,findOneupdateOne,updateManydeleteOne,deleteMany
6.2 Operadores Básicos
$set,$unset$inc,$mul$push,$pull,$addToSet$exists,$regex
6.3 Operadores Avanzados
$currentDate$rename$min,$max
6.4 Proyecciones
- Inclusión/exclusión de campos.
- Control del tamaño del documento resultante.
7. Agregaciones (Aggregation Pipeline)
7.1 Concepto
Pipeline tipo data-flow similar a ETL, compuesto de etapas secuenciales.
7.2 Etapas Frecuentes
$match$project$sort$group$unwind$lookup$facet$limit,$skip
7.3 Características
- Altamente optimizado.
- Permite modelado analítico avanzado.
- Reemplaza complejas consultas SQL.
8. Consistencia y Transacciones
8.1 Modelo de Consistencia
- Fuerte a nivel de documento.
- Eventual en sistemas distribuidos.
8.2 Write Concern
Control sobre la confirmación:
acknowledgedjournaledmajoritylinearizable
8.3 Read Concern
localmajoritylinearizablesnapshot
8.4 Transacciones Multi-Documento
- Útiles para integridad compleja.
- Más lentas que operaciones atómicas nativas.
9. Concurrencia Interna
9.1 MVCC
- Lecturas no bloquean escrituras.
- Escrituras no bloquean lecturas.
- Ideal para cargas mixtas.
9.2 Locking
- Granularidad fina.
- Locks por documento.
- Locks de intención a nivel colección/DB.
10. Replicación
10.1 Replica Sets
Conjunto de nodos:
- Primario recibe escrituras.
- Secundarios replican.
- Procesos de election automatizados.
10.2 Preferencias de Lectura
primaryprimaryPreferredsecondarysecondaryPreferrednearest
11. Sharding (Escalado Horizontal)
11.1 Clave de Shard
Requisitos:
- Alta cardinalidad.
- Buena distribución.
- No monotónica (evitar hot spots).
11.2 Componentes
- Shards.
- Config servers.
- Routers
mongos.
11.3 Balancer
- Reorganiza “chunks”.
- Evita sobrecarga en nodos concretos.
11.4 Métodos de Sharding
- Por rango.
- Por hash.
- Por zonas etiquetadas (tag aware).
12. Seguridad
12.1 Autenticación
- SCRAM-SHA.
- LDAP.
- X.509.
12.2 Autorización
- Roles integrados.
- Roles definidos por el usuario.
12.3 Encriptación
- En tránsito.
- En reposo.
- A nivel de campo (Client-Side FLE).
13. Observabilidad
13.1 Herramientas
mongostatmongotop- Profiler
- Logs estructurados
13.2 Métricas Clave
- Latencia.
- Lock ratio.
- Cache hit ratio.
- Fragmentación.
- Uso del disco.
14. Patrones de Diseño
14.1 Bucket Pattern
Agrupar documentos pequeños por lotes/tiempo.
14.2 Attribute Pattern
Aplanar estructuras complicadas para mejor indexación.
14.3 Outlier Pattern
Separar valores anómalos en otra colección.
14.4 Extended Reference Pattern
Combinación de embedding parcial + referencia.
14.5 Polymorphic Pattern
Documentos con múltiples formas o estructuras bajo una misma colección.
15. Limitaciones
15.1 Transacciones Limitadas
Multi-documento es más costoso.
15.2 No Hay Foreign Keys Internas
La integridad referencial debe gestionarse en la aplicación o mediante agregaciones.
15.3 Riesgo de Fragmentación
Documentos de crecimiento constante pueden fragmentarse.
15.4 Elección Incorrecta de Shard Key
Causa particiones calientes y pérdida de escalabilidad.
Conclusión
MongoDB se basa en un modelo flexible, distribuido y optimizado para escalabilidad horizontal. Sus fundamentos teóricos permiten diseñar modelos eficientes, entender su comportamiento interno y aprovechar al máximo su capacidad para manejar datos modernos y aplicaciones distribuidas.
¿Te gusta este contenido? Suscríbete vía RSS