De tablas a documentos
MongoDB es la base de datos NoSQL más popular del mundo. En lugar de guardar filas en tablas con columnas fijas, guarda documentos JSON (técnicamente BSON) dentro de colecciones. Esto la hace ideal para datos donde la estructura cambia o donde guardar objetos anidados con una tabla relacional sería una pesadilla.
Cuándo pensar en MongoDB
MongoDB brilla en catálogos de productos con atributos variables, logs de eventos, perfiles de usuario con campos opcionales, contenido editorial y cualquier cosa donde el esquema sea flexible. No es la mejor opción para sistemas con muchísimos joins complejos o transacciones bancarias clásicas: ahí PostgreSQL o MySQL te servirán mejor.
Instalación en Ubuntu
MongoDB no vive en los repos oficiales de Ubuntu, tienes que añadir el repo de la gente de MongoDB:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl enable --now mongod
Entrar al shell
El cliente moderno se llama mongosh:
mongosh
No hace falta crear la base antes: cuando insertas algo, MongoDB la crea sola. Cambia al contexto de tu base:
use tienda
Insertar documentos
Cada documento es un objeto JSON. Vamos a insertar dos productos:
db.productos.insertOne({
nombre: "Teclado mecánico",
precio: 129.90,
stock: 15,
etiquetas: ["gaming", "retroiluminado"],
fabricante: { nombre: "Keytron", pais: "CN" }
})
db.productos.insertMany([
{ nombre: "Mouse inalámbrico", precio: 39.00, stock: 40 },
{ nombre: "Alfombrilla XL", precio: 18.50, stock: 120 }
])
Fíjate que los documentos pueden tener campos distintos dentro de la misma colección. Eso es lo que hace a MongoDB "schemaless".
Consultar con find
db.productos.find() // todos
db.productos.find({ stock: { $lt: 20 } }) // stock menor a 20
db.productos.find({ precio: { $gte: 30, $lte: 100 } })
db.productos.find({ etiquetas: "gaming" }) // arrays
Los operadores como $lt, $gte, $in son el pan de cada día. Para formatear la salida, añade .pretty().
Índices básicos
Cuando la colección crece, las búsquedas secuenciales se vuelven lentas. Crear un índice es tan simple como:
db.productos.createIndex({ nombre: 1 })
db.productos.createIndex({ precio: -1, stock: 1 })
Usa explain() para verificar que tus consultas los están aprovechando: db.productos.find({ nombre: "Mouse inalámbrico" }).explain().
Siguiente paso
Ya tienes lo mínimo para trabajar. A partir de aquí vale la pena aprender el framework de agregación (aggregate), que es el equivalente a los GROUP BY avanzados de SQL y es donde MongoDB enseña los dientes de verdad.