Skip to content

¿Qué es NoSQL? ​

Durante décadas, "base de datos" fue sinónimo de "tablas relacionales con SQL". A finales de los 2000, empresas como Google, Amazon y Facebook necesitaron guardar cantidades enormes de datos de formas que las tablas no resolvían bien, y nacieron las bases NoSQL. En esta lección entenderás qué son, sus cuatro grandes familias, cómo se comparan con las relacionales y, lo más importante, cuándo usar MongoDB y cuándo no.

Concepto ​

NoSQL significa "Not only SQL" (no solo SQL). Agrupa a las bases de datos que no usan el modelo relacional de tablas. No es una tecnología concreta, sino una familia muy diversa.

Analogía: una base relacional es como un archivero con formularios impresos: cada cliente llena exactamente los mismos campos y los formularios de distintos cajones se relacionan por número de folio. Una base de documentos como MongoDB es como una carpeta por cliente: dentro metes todo lo relacionado con él (datos, direcciones, historial), y cada carpeta puede tener papeles distintos.

txt
RELACIONAL (3 tablas)                         DOCUMENTOS (1 documento)
clientes                                      {
┌────┬───────────┐                              "_id": 1,
│ id │ nombre    │                              "nombre": "Ana López",
│ 1  │ Ana López │                              "direcciones": [
└────┴───────────┘                                { "ciudad": "CDMX", "cp": "06600" },
direcciones                                       { "ciudad": "Puebla", "cp": "72000" }
┌────┬────────────┬────────┐                    ],
│ id │ cliente_id │ ciudad │                    "telefonos": ["5511111111"]
│ 1  │ 1          │ CDMX   │                  }
│ 2  │ 1          │ Puebla │
└────┴────────────┴────────┘
telefonos ...

Las cuatro familias de NoSQL ​

TipoCómo guardaEjemplosIdeal para
DocumentosDocumentos tipo JSON agrupados en coleccionesMongoDB, Firestore, CouchDBCatálogos, contenido, perfiles, apps web y móviles
Clave-valorUn diccionario gigante: clave → valorRedis, DynamoDB, MemcachedCaché, sesiones, carritos, contadores, colas
Columnar (column-family)Filas con columnas dinámicas agrupadas en familiasCassandra, HBase, ScyllaDBEscrituras masivas, series de tiempo, IoT a gran escala
GrafosNodos y relacionesNeo4j, Amazon NeptuneRedes sociales, recomendaciones, detección de fraude
txt
Clave-valor (Redis)           Grafo (Neo4j)
"sesion:abc123" → {...}       (Ana)──AMIGA_DE──►(Luis)
"carrito:42"    → [...]          │                 │
"visitas:home"  → 15230       COMPRÓ            COMPRÓ
                                 ▼                 ▼
                              (Teclado)◄──SIMILAR──(Monitor)

En proyectos web reales es común combinar varias: PostgreSQL o MongoDB como base principal y Redis como caché.

Relacional vs documentos ​

AspectoRelacional (MySQL, PostgreSQL)Documentos (MongoDB)
UnidadFila en una tablaDocumento en una colección
EsquemaFijo, definido antes (CREATE TABLE)Flexible; se puede validar opcionalmente
RelacionesClaves foráneas + JOINsDatos embebidos o referencias + $lookup
Integridad referencialGarantizada por la BDResponsabilidad de la aplicación
LenguajeSQL (estándar)API propia (métodos JS, pipeline de agregación)
TransaccionesACID maduras desde siempreACID en un documento siempre; multi-documento desde la versión 4.0
EscaladoVertical + réplicas de lectura (horizontal posible pero complejo)Horizontal nativo (sharding)
Cambios de estructuraMigraciones (ALTER TABLE)Documentos nuevos con campos nuevos, sin migrar todo
Encaja conDatos muy relacionados y estructuradosDatos jerárquicos o variables, leídos "en bloque"

Equivalencias de vocabulario:

SQLMongoDB
Base de datosBase de datos
TablaColección
FilaDocumento
ColumnaCampo
Clave primaria_id
JOINDocumento embebido o $lookup
GROUP BY$group (agregación)
ÍndiceÍndice

El teorema CAP (versión corta) ​

En un sistema distribuido (datos repartidos en varios servidores), cuando la red falla entre ellos (Partición), hay que elegir entre:

  • Consistencia: todos ven el mismo dato al mismo tiempo (aunque algunos no puedan responder).
  • Disponibilidad (Availability): todos responden siempre (aunque algunos con datos un poco viejos).
txt
          Consistencia
              /\
             /  \        Con una partición de red
            /    \       solo puedes garantizar dos.
           / CP   \      MongoDB (por defecto): CP
          /        \     Cassandra: AP
         /    AP    \
        ──────────────
 Disponibilidad    Tolerancia a particiones

MongoDB, con su configuración por defecto (escrituras al nodo primario), prioriza la consistencia. En la práctica, para un proyecto de un solo servidor o un cluster pequeño de Atlas, CAP casi no te afecta; es útil conocerlo para entender por qué existen distintas bases NoSQL.

Ventajas de MongoDB ​

  • Modelo natural para JavaScript: un documento es prácticamente un objeto JS. Sin "traducir" entre objetos y tablas.
  • Esquema flexible: agregar un campo no requiere migrar millones de filas.
  • Lecturas rápidas de datos agregados: un pedido con sus productos embebidos se lee con una sola consulta, sin JOINs.
  • Escalado horizontal con sharding cuando el volumen lo exige.
  • Atlas: cluster gratuito en la nube, respaldos, búsqueda de texto (Atlas Search) y búsqueda vectorial para IA.
  • Framework de agregación muy potente para reportes.

Desventajas y riesgos ​

  • Sin JOINs eficientes "por defecto": $lookup existe pero no reemplaza a un buen JOIN relacional en consultas muy cruzadas.
  • Integridad referencial manual: nada impide guardar un pedido con un clienteId que no existe.
  • Duplicación de datos: embeber implica copiar datos (por ejemplo, el nombre del producto en cada pedido) y mantenerlos coherentes.
  • "Esquema flexible" mal entendido = datos caóticos: documentos con precio como texto, otros como número, otros sin precio.
  • Consultas analíticas muy complejas suelen ser más simples en SQL.

Mito: "NoSQL no tiene esquema"

Tus datos siempre tienen un esquema; la pregunta es dónde se define. En SQL lo impone la base de datos. En MongoDB lo impones tú: con validación $jsonSchema, con Mongoose o con disciplina en el código. Sin eso, en seis meses tendrás documentos inconsistentes y errores difíciles de rastrear.

¿Cuándo usar MongoDB? ​

Usa MongoDB cuando...Usa SQL cuando...
Los datos varían mucho entre registros (catálogo con atributos distintos por categoría)La estructura es estable y bien conocida
Lees y escribes "objetos completos" (un perfil, un artículo con comentarios, un pedido)Necesitas cruzar datos de muchas formas (reportes, ERP, contabilidad)
Prototipas rápido y el modelo cambia cada semanaLa integridad referencial es crítica (finanzas, inventarios estrictos)
Registras eventos, logs o datos de sensores en volumenHay muchas relaciones N:M
Tu stack es JavaScript de punta a punta (MERN/MEAN)El hosting del cliente solo ofrece MySQL
Necesitas escalar escrituras horizontalmenteEl equipo domina SQL y el proyecto no tiene requisitos especiales

Ejemplos concretos:

ProyectoElección razonable
CMS / blog con artículos, etiquetas y comentariosMongoDB o SQL (ambos bien)
Catálogo de marketplace con miles de tipos de productoMongoDB (o PostgreSQL con JSONB)
Sistema de nómina o contabilidadSQL
App de chat en tiempo realMongoDB (mensajes) + Redis
Sistema escolar con inscripciones, grupos y calificacionesSQL
Registro de eventos de analítica o IoTMongoDB (o una base de series de tiempo)
Tienda en línea clásicaCualquiera; SQL es la opción más segura

La opción híbrida

PostgreSQL con columnas JSONB (Tipos avanzados) te da flexibilidad tipo documento dentro de una base relacional. Para muchos proyectos es el mejor de ambos mundos. Elige MongoDB cuando el modelo de documentos sea realmente el centro de tu aplicación.

Ejemplo: el mismo pedido en ambos mundos ​

En SQL, un pedido se reconstruye uniendo cuatro tablas:

sql
SELECT pe.id, cl.nombre, pr.nombre AS producto, d.cantidad, d.precio_unitario
FROM pedidos pe
JOIN clientes cl ON cl.id = pe.cliente_id
JOIN detalle_pedido d ON d.pedido_id = pe.id
JOIN productos pr ON pr.id = d.producto_id
WHERE pe.id = 1;

En MongoDB, el pedido es un documento que ya contiene lo que necesitas mostrar:

js
db.pedidos.findOne({ _id: 1 })
json
{
  "_id": 1,
  "cliente": { "id": 1, "nombre": "Ana López" },
  "fecha": "2024-05-02T00:00:00Z",
  "estado": "entregado",
  "items": [
    { "productoId": 1, "nombre": "Audífonos Bluetooth", "cantidad": 1, "precio": 899 },
    { "productoId": 4, "nombre": "Libro Aprende SQL", "cantidad": 2, "precio": 349 }
  ],
  "total": 1597
}

Más simple de leer... pero si mañana el cliente cambia de nombre, ¿actualizas todos sus pedidos? (Respuesta: normalmente no, porque el pedido es un registro histórico. Este tipo de decisiones las verás en Índices y modelado.)

Ejercicios ​

  1. Clasifica en qué familia NoSQL encaja cada caso: a) guardar sesiones de usuario con expiración, b) "personas que quizá conozcas", c) catálogo de productos con atributos variables, d) millones de lecturas de sensores por minuto.
  2. Menciona dos ventajas y dos riesgos de un esquema flexible.
  3. Para cada proyecto, ¿MongoDB o SQL? Justifica: a) sistema de facturación electrónica, b) app de recetas donde cada receta tiene ingredientes, pasos y fotos, c) sistema de reservas de hotel con disponibilidad por fecha.
  4. Traduce los términos: tabla, fila, columna, JOIN, clave primaria.
Ver solución
  1. a) Clave-valor (Redis, con TTL). b) Grafos. c) Documentos. d) Columnar (Cassandra) o una base de series de tiempo; MongoDB también tiene colecciones de series de tiempo.
  2. Ventajas: agregar campos sin migraciones; registros con estructuras distintas en la misma colección. Riesgos: datos inconsistentes (tipos mezclados, campos faltantes) y errores en la app que la base no detecta.
  3. a) SQL: datos estructurados, cálculos exactos, integridad y auditoría estricta. b) MongoDB encaja muy bien: cada receta es un documento autocontenido que se lee completo. c) SQL suele ser mejor: reglas de no traslape, transacciones y consultas por rangos de fechas sobre datos muy relacionados (PostgreSQL incluso tiene restricciones EXCLUDE para eso).
  4. Tabla → colección, fila → documento, columna → campo, JOIN → embeber o $lookup, clave primaria → _id.

Resumen ​

  • NoSQL agrupa bases no relacionales: documentos, clave-valor, columnar y grafos.
  • MongoDB guarda documentos tipo JSON en colecciones; equivale a tablas y filas, pero flexibles.
  • Ventajas: modelo natural para JS, esquema flexible, lecturas sin JOINs, escalado horizontal.
  • Riesgos: integridad referencial manual, duplicación de datos, caos si no validas el esquema.
  • Elige según la forma de tus datos y cómo los consultas; para dudas, SQL (o PostgreSQL + JSONB) es la apuesta segura.

Academia Web — aprende, copia y construye.