Saltar al contenido principal
MongoDB29 de julio de 202612 min de lectura
Principiante12 min Full Stack Developer Backend Developer

MongoDB: la revolución NoSQL

Tutorial de MongoDB desde cero: documentos BSON, CRUD, operadores de query, aggregation pipeline, índices, diferencias con SQL y ejercicios prácticos.

MongoDBNoSQLCRUDAggregationDocumentosBase de datos

Lo que aprenderás

  • Instalar MongoDB y usar mongosh
  • Realizar operaciones CRUD con documentos
  • Usar operadores de query avanzados
  • Construir pipelines de agregación
  • Crear índices y analizar rendimiento
Tutorial12 min

MongoDB: la revolución NoSQL

MongoDB es la base de datos NoSQL más popular. Almacena datos como documentos BSON, ofreciendo esquemas flexibles, escalabilidad horizontal y alta velocidad de desarrollo.


Conceptos clave

En MongoDB los datos se organizan en: Base de datosColeccionesDocumentos. A diferencia de SQL, no hay tablas ni filas. Cada documento es un objeto BSON con su propio esquema — un documento puede tener campos que otro no tiene.

El _id es un ObjectId único generado automáticamente (12 bytes: timestamp + machine ID + process ID + counter). También puedes usar tu propio _id (UUID, número, etc.).

BSON es una extensión binaria de JSON que soporta tipos adicionales como Date, ObjectId, BinData, y números de 32/64 bits. Es lo que realmente se almacena en disco.

Instalación

Opciones para empezar con MongoDB:

  • macOS: brew install mongodb-community@7 + brew services start mongodb-community@7
  • Docker: docker run --name mongodb -p 27017:27017 -d mongo:7
  • MongoDB Compass: GUI oficial para explorar y gestionar datos visualmente
  • mongosh: shell interactiva — solo escribe mongosh

CRUD básico

Las cuatro operaciones fundamentales en MongoDB:

CREATE

db.usuarios.insertOne({
  nombre: "Ana",
  email: "ana@email.com",
  edad: 28,
  ciudad: "Madrid"
});

db.usuarios.insertMany([
  { nombre: "Luis", edad: 35, ciudad: "Barcelona" },
  { nombre: "María", edad: 42, ciudad: "Valencia" }
]);

READ

db.usuarios.find({ edad: { $gt: 30 } });
db.usuarios.find({ ciudad: "Madrid" }).sort({ edad: -1 }).limit(5);
db.usuarios.findOne({ email: "ana@email.com" });

UPDATE

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

db.usuarios.updateMany(
  { ciudad: "Madrid" },
  { $set: { pais: "España" } }
);

DELETE

db.usuarios.deleteOne({ email: null });
db.usuarios.deleteMany({ edad: { $lt: 18 } });

Operadores de query

MongoDB ofrece operadores para consultas avanzadas:

  • Comparación: $gt, $gte, $lt, $lte, $in, $ne
  • Texto: $regex (búsqueda con expresiones regulares)
  • Existencia: $exists, $type
  • Arrays: $all, $elemMatch, $size
  • Lógicos: $and, $or, $not
-- Usuarios de Madrid o Barcelona con edad entre 25 y 40
db.usuarios.find({
  $and: [
    { ciudad: { $in: ["Madrid", "Barcelona"] } },
    { edad: { $gte: 25, $lte: 40 } }
  ]
});

-- Búsqueda textual con regex
db.usuarios.find({ email: { $regex: /@gmail.com$/i } });

Aggregation Pipeline

El equivalente a GROUP BY, JOINs y transformaciones complejas. Los documentos pasan por una tubería de etapas:

db.pedidos.aggregate([
  { $match: { estado: "completado" } },
  { $group: {
    _id: "$usuario_id",
    total: { $sum: "$total" },
    count: { $sum: 1 }
  }},
  { $sort: { total: -1 } },
  { $limit: 10 },
  { $lookup: {
    from: "usuarios",
    localField: "_id",
    foreignField: "_id",
    as: "usuario"
  }},
  { $unwind: "$usuario" },
  { $project: {
    nombre: "$usuario.nombre",
    total: 1,
    pedidos: 1
  }}
]);

Etapas clave: $match (filtro, como WHERE), $group (agrupación), $sort, $limit, $project (seleccionar campos), $lookup (como JOIN), $unwind (desanidar arrays).

Coloca $match y $limit lo antes posible en el pipeline para reducir los documentos que pasan a las siguientes etapas y mejorar el rendimiento.

Índices

Los índices aceleran las consultas drásticamente:

// Índice simple
db.usuarios.createIndex({ email: 1 });

// Índice compuesto
db.usuarios.createIndex({ ciudad: 1, edad: -1 });

// Índice parcial
db.pedidos.createIndex(
  { total: 1 },
  { partialFilterExpression: { estado: "completado" } }
);

// Índice de texto
db.usuarios.createIndex({ nombre: "text", email: "text" });

// Analizar consulta
db.usuarios.find({ email: "ana@email.com" }).explain("executionStats");

MongoDB usa índices automáticamente. .explain("executionStats") te muestra si se usó un INDEX SCAN (bueno) o un COLLSCAN (malo — revisa toda la colección).

SQL vs MongoDB: las JOINs se hacen con $lookup o embebiendo datos relacionados dentro del mismo documento. Las transacciones multi-documento ACID están disponibles desde MongoDB 4.0. El sharding horizontal es nativo y permite escalar entre cientos de servidores.

Ejercicios


MongoDB brilla cuando necesitas flexibilidad de esquema, escalabilidad horizontal y desarrollo rápido. Combínalo con SQL para sacar lo mejor de ambos mundos.