Volver a MongoDB Básico
Introducción a MongoDB
¿Qué es MongoDB?
MongoDB es una base de datos NoSQL orientada a documentos que almacena datos como documentos BSON flexibles (JSON Binario) organizados en colecciones (equivalentes a tablas). Destaca en:
- Datos semi-estructurados o con esquema variable
- Datos jerárquicos/anidados
- Alto rendimiento de escritura
- Escalado horizontal mediante sharding
Conceptos Clave
| SQL | MongoDB |
|---|---|
| Base de datos | Base de datos |
| Tabla | Colección |
| Fila | Documento |
| Columna | Campo |
| Índice | Índice |
| JOIN | $lookup / doc anidado |
Instalación con Docker
services:
mongodb:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
Comandos Básicos de mongosh
// Conectar
mongosh "mongodb://admin:password@localhost:27017"
// Ver bases de datos y colecciones
show dbs
use miapp
show collections
// Insertar documentos
db.usuarios.insertOne({
nombre: "Alicia",
email: "[email protected]",
edad: 30,
direccion: { ciudad: "Ciudad de México", pais: "MX" },
etiquetas: ["desarrolladora", "admin"]
})
db.usuarios.insertMany([
{ nombre: "Roberto", email: "[email protected]", edad: 25 },
{ nombre: "Carmen", email: "[email protected]", edad: 35 }
])
Operaciones CRUD
// Leer
db.usuarios.find({ edad: { $gte: 28 } })
db.usuarios.findOne({ email: "[email protected]" })
// Actualizar — $set modifica sólo los campos indicados
db.usuarios.updateOne(
{ email: "[email protected]" },
{ $set: { edad: 31, "direccion.ciudad": "Guadalajara" } }
)
// Upsert: insertar si no existe
db.usuarios.updateOne(
{ email: "[email protected]" },
{ $set: { nombre: "David", edad: 40 } },
{ upsert: true }
)
// Actualizar varios
db.usuarios.updateMany(
{ pais: "MX" },
{ $set: { moneda: "MXN" } }
)
// Eliminar
db.usuarios.deleteOne({ email: "[email protected]" })
db.usuarios.deleteMany({ edad: { $lt: 18 } })
Tipos de Datos
db.productos.insertOne({
_id: ObjectId(),
nombre: "Monitor",
precio: 299.99,
stock: NumberInt(50),
creado_en: new Date(),
activo: true,
descripcion: null,
specs: {
resolucion: "4K",
tasa_refresco: NumberInt(144)
},
etiquetas: ["pantalla", "periférico"]
})
Comandos Útiles de mongosh
// Contar documentos
db.usuarios.countDocuments({ edad: { $gte: 18 } })
// Valores únicos
db.usuarios.distinct("direccion.pais")
// Eliminar colección
db.usuarios.drop()
// Estadísticas de la colección
db.usuarios.stats()