Skip to main content
[ PIER ]

MongoDB

La base de datos documental para esquemas flexibles y evolutivos.

Database Listo para clúster #nosql#document

MongoDB es una base de datos NoSQL orientada a documentos que almacena datos como BSON (JSON binario). Es la elección por defecto para aplicaciones con esquemas que evolucionan rápido, datos profundamente anidados y altos volúmenes de escritura — donde el DDL SQL rígido frenaría el desarrollo.

Desplegar con Pier

  1. 1 Abre el panel de Pier y haz clic en Add service.
  2. 2 Elige MongoDB en la lista de plantillas.
  3. 3 Elige la versión, asigna un nombre al servicio y Pier provisionará automáticamente el contenedor, el almacenamiento y los puertos.
  4. 4 Vincula un dominio si quieres HTTPS. Traefik genera el certificado de Let's Encrypt automáticamente.

¿Qué es MongoDB?

MongoDB es la base de datos documental NoSQL más desplegada. En lugar de tablas y filas, almacena documentos BSON — objetos anidados muy parecidos a JSON — agrupados en colecciones. Los esquemas son opcionales; las consultas usan una sintaxis JSON-like rica que se mapea naturalmente a JavaScript y otros lenguajes dinámicos.

El trade-off vs SQL es real: renuncias a la integridad de foreign keys cross-collection y a la conformidad ANSI con SQL estándar. A cambio obtienes flexibilidad de schema-on-read, atomicidad profunda de documentos y un lenguaje de consulta que encaja con la forma de los datos modernos mejor que las filas relacionales rígidas.

Cómo lo despliega Pier

Pier usa la imagen Docker oficial mongo, montando /data/db como volumen persistente. La versión por defecto es latest (MongoDB 8.x); 7 y 6 están disponibles para fijar versión estrictamente. Las credenciales root se autogeneran vía MONGO_INITDB_ROOT_USERNAME + MONGO_INITDB_ROOT_PASSWORD.

Solo un nodo en esta plantilla — los replica sets multi-nodo requieren inicialización manual y aún no se soportan vía el modo clúster de Pier. Los backups usan mongodump --archive --gzip en horario y pueden subirse a S3.

Cuándo NO usar MongoDB

Para cargas con necesidades rígidas de integridad relacional (ledgers financieros, inventario con foreign keys estrictas) — elige Postgres. Para búsqueda full-text — Elasticsearch. Para embebido mono-proceso — SQLite. Mongo brilla cuando tus datos tienen estructura anidada que cambia de forma a menudo y quieres ergonomía JSON-nativa.

Características clave

Flexibilidad de esquema

Cada documento en una colección puede tener su propia forma. Añade campos sin ALTER TABLE; elimínalos sin migraciones. Las reglas de validación se pueden imponer cuando se necesite.

Pipeline de agregación potente

$match, $group, $lookup (join), $facet, $bucket, $unwind, $graphLookup — el framework de agregación de MongoDB rivaliza con SQL para consultas analíticas sobre datos documentales.

Escalado horizontal nativo

El sharding por clave hashed o por rango divide colecciones entre nodos. Los replica sets dan failover automático, escalado de lecturas y mantenimiento sin downtime.

Índices geoespaciales

Índices 2dsphere para puntos GeoJSON, polígonos, multipolígonos. Consultas $near, $geoWithin, $geoIntersects con precisión de kilómetros.

Change streams (CDC)

Suscríbete a inserts/updates/deletes en tiempo real vía change streams. Construye UIs reactivos, sincroniza con otros sistemas, alimenta workflows event-driven.

Time series collections (5.0+)

Colecciones dedicadas de series temporales con almacenamiento columnar y bucketing automático — diseñadas para IoT y cargas de métricas.

Casos de uso

Plataformas de contenido generado por usuarios

Posts de redes sociales, comentarios, reacciones — los campos flexibles por documento encajan naturalmente en BSON.

Ingesta IoT en tiempo real

Alto throughput de escritura, time series collections y change streams hacen de Mongo un backend IoT viable.

Catálogo de productos con atributos variables

Catálogos e-commerce con atributos distintos por categoría (TVs tienen tamaño de pantalla; libros tienen ISBN) — sin necesidad de columnas SQL sparse ni EAV.

Backend de sincronización para apps móviles

Mongo Realm + Atlas Device Sync. Para self-hosted, empareja con capas de sincronización estilo WatermelonDB o PouchDB.

Vista única / perfiles de cliente 360

Agrega datos de muchos sistemas en un documento desnormalizado por cliente. Updates atómicos en campos anidados.

Ejemplos de código

Insertar un documento javascript
db.users.insertOne({
  email: "[email protected]",
  profile: {
    name: "Aleksandr",
    locale: "es",
    tags: ["beta", "pro"]
  },
  createdAt: new Date()
});
Pipeline de agregación (tags top por locale) javascript
db.users.aggregate([
  { $unwind: "$profile.tags" },
  { $group: {
      _id: { locale: "$profile.locale", tag: "$profile.tags" },
      count: { $sum: 1 }
  }},
  { $sort: { count: -1 } },
  { $limit: 20 }
]);
Consulta geoespacial (buscar en 5 km) javascript
db.places.createIndex({ location: "2dsphere" });

db.places.find({
  location: {
    $near: {
      $geometry: { type: "Point", coordinates: [37.6173, 55.7558] },
      $maxDistance: 5000
    }
  }
});
Change stream (CDC en tiempo real) javascript
const stream = db.orders.watch([
  { $match: { "fullDocument.status": "paid" } }
]);
stream.on("change", (ev) => sendToWarehouse(ev.fullDocument));

Comparativa

vs PostgreSQL con JSONB El JSONB de Postgres iguala la flexibilidad de Mongo manteniendo joins, transacciones y SQL. Si necesitas datos relacionales y documentos en un mismo sitio, Postgres suele ganar. Elige Mongo cuando los documentos sean el modelo principal y quieras change streams + sharding nativos.
vs CouchDB CouchDB es master-master con sincronización offline-first — genial para móvil. Mongo gana en potencia de agregación, ecosistema y tooling.
vs Elasticsearch Elastic está diseñado específicamente para búsqueda full-text; Mongo es para almacenamiento documental genérico. A menudo se emparejan — Mongo como fuente de verdad, Elastic como índice de búsqueda.
vs DynamoDB Dynamo es gestionado por AWS y pay-per-request; Mongo es autohospedado con costes predecibles. Mongo tiene agregaciones que Dynamo no tiene.

Preguntas frecuentes

¿Qué versión de MongoDB despliega Pier?
Default `latest` (actualmente 8.x). Versiones 7 y 6 también en el selector. MongoDB 5.0+ es requisito para time series collections.
¿Soporta replicación?
Un solo nodo por defecto. Los replica sets necesitan 3+ nodos con scripts de init especiales — no soportados vía la plantilla estándar. Para replica sets, usa una plantilla Docker custom o Mongo Atlas.
¿La licencia SSPL me afecta?
SSPL solo restringe ofrecer MongoDB como SaaS a terceros. Usarlo como base de datos para tu propia aplicación — incluso comercial — está bien. Pier despliega la imagen oficial `mongo` directamente.
¿Cómo conecto desde mi app?
URI estándar — `mongodb://user:pass@host:27017/dbname`. Pier muestra el string completo en la página de detalle del servicio.
¿Autenticación por defecto?
Pier configura `MONGO_INITDB_ROOT_USERNAME` y `MONGO_INITDB_ROOT_PASSWORD` (contraseña fuerte autogenerada) en init.
¿Los backups son automáticos?
Sí — `mongodump --archive --gzip` corre en horario y puede enviar a S3. Backups por base de datos y de instancia completa soportados.
¿Cuándo añadir índices?
En cuanto una consulta supere los 100ms. Usa `db.collection.explain('executionStats').find(...)` para inspeccionar planes. La mayoría de problemas de producción de Mongo son índices faltantes en campos de $sort o $match.

Servicios relacionados

Desplegar en tu VPS

MongoDB es una base de datos NoSQL orientada a documentos que almacena datos como BSON (JSON binario). Es la elección por defecto para aplicaciones con esquemas que evolucionan rápido, datos profundamente anidados y altos volúmenes de escritura — donde el DDL SQL rígido frenaría el desarrollo.

Desplegar este servicio →