MongoDB básico: instalación y primeros documentos
Dedicados & VPS
1

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.