Skip to content

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Latest commit

 

History

34 Commits

Folders and files

Repository files navigation

MongoDB — Guía Profesional de MongoDB y MongoDB Atlas

MongoDB

Tutorial práctico en español para aprender MongoDB desde cero hasta un uso profesional con MongoDB Atlas.

MongoDB Guide Release v2.0.0 Español

Autor: Alejandro Di Stefano


Sobre este repositorio

Este repositorio está diseñado como guía de aprendizaje, laboratorio y referencia técnica de MongoDB.

No es únicamente una colección de comandos: explica los conceptos que hay detrás de una base documental, cómo modelar datos, cómo consultar de forma eficiente, cómo crear índices, cómo utilizar Aggregation Framework y cómo operar MongoDB Atlas con criterios adecuados de seguridad y producción.

La documentación está pensada para tres usos:

  • aprender MongoDB desde cero;
  • utilizarla como material de formación;
  • consultar rápidamente comandos y patrones durante el desarrollo.

Los ejemplos utilizan principalmente mongosh. Los conceptos son aplicables a los drivers oficiales de Node.js, Java, Go, Python, C#, PHP y otros lenguajes.


Contenido

Capítulo Tema
01 — Fundamentos e instalación Arquitectura documental, BSON, mongod, mongosh, Compass e instalación
02 — CRUD y consultas Insert, find, operadores, arrays, proyecciones, update, delete y cursores
03 — Modelado de datos Embedding, references, cardinalidad, validación y diseño de documentos
04 — Índices y performance Índices, explain(), selectividad, ESR, covered queries y optimización
05 — Aggregation Framework Pipelines, $match, $group, $lookup, $facet, $unwind y análisis
06 — MongoDB Atlas Deployments, usuarios, Network Access, connection strings, Search y seguridad
07 — Operación y producción Backup, restore, transacciones, observabilidad, migraciones y producción
Cheat Sheet Referencia rápida de comandos y patrones frecuentes

MongoDB en pocas palabras

MongoDB es una base de datos documental. La información se almacena como documentos BSON agrupados en colecciones.

{
  _id: ObjectId("..."),
  nombre: "Notebook Pro",
  precio: 1250,
  stock: 8,
  categorias: ["hardware", "notebooks"],
  fabricante: {
    nombre: "Example Corp",
    pais: "AR"
  },
  activo: true
}

Equivalencias conceptuales

SQL MongoDB
Database Database
Table Collection
Row Document
Column Field
Primary Key _id
JOIN $lookup o modelado embebido
SELECT find() / aggregate()
INSERT insertOne() / insertMany()
UPDATE updateOne() / updateMany()
DELETE deleteOne() / deleteMany()

MongoDB no debe interpretarse como una base de datos "sin esquema". El esquema es flexible, pero en sistemas reales debe diseñarse, validarse y evolucionarse de forma controlada.


Herramientas principales

Para un entorno de desarrollo completo se recomienda conocer:

  • MongoDB Community Server — servidor local.
  • MongoDB Shell (mongosh) — cliente de línea de comandos.
  • MongoDB Compass — interfaz gráfica oficial.
  • MongoDB Database Tools — mongodump, mongorestore, mongoimport, mongoexport, etc.
  • MongoDB Atlas — plataforma administrada en la nube.

Enlaces oficiales:

Verificación local

mongod --version
mongosh --version
mongodump --version

Quick Start local

1. Iniciar MongoDB

mongod --dbpath="D:\mongodb-data"

El directorio indicado debe existir previamente.

Si MongoDB fue instalado como servicio, puede que el servidor ya se encuentre ejecutándose.

2. Conectarse

mongosh

Conexión local por defecto:

mongodb://127.0.0.1:27017

3. Crear o seleccionar una base

use tienda

4. Insertar información

db.productos.insertOne({
  nombre: "Notebook",
  precio: 1200,
  stock: 10,
  activo: true
})

5. Consultar

db.productos.find({ activo: true })

CRUD esencial

Create

db.usuarios.insertOne({
  nombre: "Ana",
  edad: 31,
  activo: true
})
db.usuarios.insertMany([
  { nombre: "Ana", edad: 31, activo: true },
  { nombre: "Luis", edad: 27, activo: true },
  { nombre: "Carla", edad: 38, activo: false }
])

Read

db.usuarios.find({ activo: true })
db.usuarios.findOne({ nombre: "Ana" })

Update

db.usuarios.updateOne(
  { nombre: "Ana" },
  { $set: { edad: 32 } }
)

Delete

db.usuarios.deleteOne({ nombre: "Ana" })

Antes de ejecutar updateMany() o deleteMany(), validá el filtro utilizando find() para confirmar qué documentos serán afectados.


Operadores de consulta

Comparación

db.usuarios.find({ edad: { $gt: 18 } })
db.usuarios.find({ edad: { $gte: 18 } })
db.usuarios.find({ edad: { $lt: 65 } })
db.usuarios.find({ edad: { $lte: 65 } })
db.usuarios.find({ edad: { $ne: 30 } })
db.usuarios.find({ edad: { $in: [25, 30, 35] } })
db.usuarios.find({ edad: { $nin: [25, 30, 35] } })

Operadores lógicos

db.usuarios.find({
  $and: [
    { activo: true },
    { edad: { $gte: 18 } }
  ]
})
db.usuarios.find({
  $or: [
    { rol: "admin" },
    { rol: "owner" }
  ]
})

Regex

db.usuarios.find({ nombre: /^ana/i })
db.usuarios.find({
  nombre: {
    $regex: "^ana",
    $options: "i"
  }
})

Proyección, ordenamiento y paginación

Proyección

db.usuarios.find(
  { activo: true },
  { nombre: 1, email: 1, _id: 0 }
)

Ordenamiento

db.usuarios.find().sort({ edad: -1 })
  • 1: ascendente.
  • -1: descendente.

Paginación simple

db.usuarios.find()
  .sort({ _id: 1 })
  .skip(20)
  .limit(10)

Para grandes volúmenes, skip() puede degradarse. En APIs de alto tráfico conviene evaluar cursor-based pagination utilizando un campo estable, ordenable e indexado.


Arrays y documentos embebidos

{
  nombre: "Alejandro",
  skills: ["MongoDB", "Node.js", "Go"]
}

Buscar por un valor del array:

db.usuarios.find({ skills: "MongoDB" })

Agregar sin duplicar:

db.usuarios.updateOne(
  { nombre: "Alejandro" },
  { $addToSet: { skills: "Docker" } }
)

Eliminar:

db.usuarios.updateOne(
  { nombre: "Alejandro" },
  { $pull: { skills: "Docker" } }
)

El diseño entre embedding y references es una de las decisiones centrales al modelar MongoDB. Está desarrollado en detalle en Modelado de datos.


Índices y performance

Un sistema puede funcionar correctamente y aun así escalar mal. Los índices forman parte del diseño de la aplicación.

Índice simple

db.usuarios.createIndex({ email: 1 })

Índice único

db.usuarios.createIndex(
  { email: 1 },
  { unique: true }
)

Índice compuesto

db.pedidos.createIndex({ clienteId: 1, createdAt: -1 })

Analizar una consulta

db.pedidos
  .find({ clienteId: ObjectId("64b000000000000000000001") })
  .sort({ createdAt: -1 })
  .explain("executionStats")

Conceptos que conviene dominar:

  • COLLSCAN vs IXSCAN;
  • selectividad;
  • índices compuestos;
  • estrategia ESR;
  • multikey indexes;
  • partial indexes;
  • TTL indexes;
  • covered queries;
  • costo de escritura de cada índice.

Ver Índices y performance.


Aggregation Framework

Aggregation permite construir pipelines para transformar y analizar información.

db.ventas.aggregate([
  {
    $match: {
      estado: "paid"
    }
  },
  {
    $group: {
      _id: "$clienteId",
      total: { $sum: "$importe" },
      operaciones: { $sum: 1 }
    }
  },
  {
    $sort: {
      total: -1
    }
  }
])

Stages frecuentes:

  • $match
  • $project
  • $set
  • $unset
  • $group
  • $sort
  • $limit
  • $skip
  • $unwind
  • $lookup
  • $facet
  • $count

Ver Aggregation Framework.


MongoDB Atlas

MongoDB Atlas es la plataforma administrada de MongoDB en la nube y permite desplegar, proteger, monitorear y escalar deployments de MongoDB sin administrar directamente toda la infraestructura subyacente.

Flujo básico de configuración

  1. Crear un proyecto.
  2. Crear un database deployment.
  3. Crear un database user.
  4. Configurar Network Access / IP Access List.
  5. Obtener el connection string.
  6. Conectarse con mongosh, Compass o el driver de la aplicación.

Conexión con mongosh

mongosh "mongodb+srv://cluster0.example.mongodb.net/tienda" --username app_user

Connection string desde una aplicación

MONGODB_URI=mongodb+srv://app_user:<password>@cluster0.example.mongodb.net/tienda?retryWrites=true&w=majority

Nunca se deben versionar credenciales reales.

Database users vs Atlas users

Un Atlas user permite acceder a la interfaz y administrar recursos de Atlas.

Un database user se utiliza para autenticarse contra MongoDB y acceder a las bases de datos según los permisos definidos.

Son conceptos diferentes y no deben confundirse.

Network Access

Además de credenciales válidas, el cliente debe poder acceder desde una dirección o red permitida.

En producción:

  • aplicar mínimo privilegio;
  • restringir rangos de red;
  • evitar 0.0.0.0/0 salvo necesidades temporales justificadas;
  • rotar credenciales;
  • separar usuarios y secretos por ambiente;
  • utilizar conexiones privadas cuando la arquitectura lo requiera.

El capítulo MongoDB Atlas profundiza en configuración, seguridad, backups, monitoring, Atlas Search, Vector Search, private networking y troubleshooting.


Backup, restore e intercambio de datos

Backup BSON

mongodump --uri="mongodb://localhost:27017/tienda" --out=./backup

Restore

mongorestore --uri="mongodb://localhost:27017" ./backup

Exportar JSON

mongoexport \
  --uri="mongodb://localhost:27017/tienda" \
  --collection=productos \
  --out=productos.json

Importar JSON

mongoimport \
  --uri="mongodb://localhost:27017/tienda" \
  --collection=productos \
  --file=productos.json \
  --jsonArray

mongodump/mongorestore y mongoexport/mongoimport no son equivalentes: los primeros están orientados a backup lógico BSON; los segundos al intercambio de datos en JSON/CSV.


Checklist para proyectos reales

  • Modelar los documentos según los patrones de acceso.
  • Definir índices a partir de consultas reales.
  • Revisar queries críticas con explain("executionStats").
  • Aplicar schema validation cuando corresponda.
  • No utilizar usuarios administrativos desde la aplicación.
  • Aplicar mínimo privilegio.
  • Mantener secretos fuera del repositorio.
  • Separar credenciales por ambiente.
  • Restringir Network Access en Atlas.
  • Configurar pooling y timeouts en el driver.
  • Implementar observabilidad y monitoreo.
  • Definir política de backups.
  • Probar periódicamente el proceso de restauración.
  • Diseñar migraciones y evolución de esquema.
  • Revisar crecimiento de colecciones e índices.

Ruta de aprendizaje recomendada

Fundamentos
    ↓
CRUD y operadores
    ↓
Modelado documental
    ↓
Índices + explain()
    ↓
Aggregation Framework
    ↓
MongoDB Atlas
    ↓
Backups + seguridad + producción

La recomendación es avanzar en ese orden. En MongoDB, aprender comandos sin comprender modelado e índices genera una falsa sensación de dominio bastante rápido.


Material histórico

Los archivos originales del repositorio se mantienen como material de práctica:

  • cmd0.js
  • temporal.js
  • personas.json
  • MOCK_DATA.json
  • dump/
  • img/
  • _ref/

La documentación actualizada se encuentra en docs/.


Release v2.0.0

La versión v2.0.0 representa una reestructuración mayor del repositorio: pasa de una colección de apuntes y comandos a una guía técnica completa de MongoDB y MongoDB Atlas.

Consultá CHANGELOG.md para ver el detalle de cambios y las notas preparadas para el release.


Autor

Alejandro Di Stefano

Repositorio creado y mantenido por Alejandro Di Stefano.


Si este material te resulta útil, podés marcar el repositorio con una ⭐ para tenerlo disponible como referencia.

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages