MongoDB
MongoDB es una base de datos NoSQL orientada a documentos. Aquí tienes los comandos esenciales.
Instalación
Section titled “Instalación”# Importar clave GPGwget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# Añadir repositorioecho "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# Instalarsudo apt updatesudo apt install mongodb-orgsudo systemctl enable --now mongodsudo pacman -S mongodbsudo systemctl enable --now mongodbAcceso a MongoDB
Section titled “Acceso a MongoDB”# Acceder al shell de MongoDBmongosh
# Acceder con autenticaciónmongosh --username usuario --authenticationDatabase admin
# Conectar a un host específicomongosh --host localhost --port 27017Comandos básicos del shell
Section titled “Comandos básicos del shell”// Ver todas las bases de datosshow dbs
// Usar / crear base de datosuse nombre_bd
// Ver colecciones en la base actualshow collections
// Ver la base de datos actualdb
// Salir del shellexitGestión de bases de datos
Section titled “Gestión de bases de datos”// Crear base de datos (se crea al insertar datos)use nombre_bddb.crear.insertOne({ nombre: "test" })
// Eliminar base de datosdb.dropDatabase()
// Ver estadísticas de la basedb.stats()Gestión de colecciones (tablas)
Section titled “Gestión de colecciones (tablas)”// Crear colección explícitamentedb.createCollection("usuarios")
// Crear colección con opciones (tamaño fijo)db.createCollection("logs", { capped: true, size: 100000 })
// Ver coleccionesshow collections
// Eliminar coleccióndb.usuarios.drop()
// Renombrar coleccióndb.usuarios.renameCollection("clientes")Operaciones CRUD
Section titled “Operaciones CRUD”Insertar documentos
Section titled “Insertar documentos”// Insertar un documentodb.usuarios.insertOne({ nombre: "Juan Pérez", email: "juan@email.com", edad: 30, activo: true})
// Insertar varios documentosdb.usuarios.insertMany([ { nombre: "Ana", email: "ana@email.com", edad: 25 }, { nombre: "Carlos", email: "carlos@email.com", edad: 35 }])Leer documentos
Section titled “Leer documentos”// Todos los documentosdb.usuarios.find()
// Con formato legibledb.usuarios.find().pretty()
// Con filtrodb.usuarios.find({ edad: 30 })
// Con operadoresdb.usuarios.find({ edad: { $gt: 25 } }) // mayor quedb.usuarios.find({ edad: { $gte: 25 } }) // mayor o igualdb.usuarios.find({ edad: { $lt: 30 } }) // menor quedb.usuarios.find({ edad: { $in: [25, 30] } }) // en lista
// Búsqueda por textodb.usuarios.find({ nombre: /Juan/ })
// Un solo documentodb.usuarios.findOne({ email: "juan@email.com" })
// Contar documentosdb.usuarios.countDocuments({ edad: 30 })
// Ordenardb.usuarios.find().sort({ edad: -1 }) // descendente
// Limitar y saltar (paginación)db.usuarios.find().limit(10).skip(20)
// Solo ciertos camposdb.usuarios.find({}, { nombre: 1, email: 1, _id: 0 })Actualizar documentos
Section titled “Actualizar documentos”// Actualizar un documentodb.usuarios.updateOne( { email: "juan@email.com" }, { $set: { edad: 31, activo: false } })
// Actualizar varios documentosdb.usuarios.updateMany( { edad: { $lt: 30 } }, { $set: { activo: false } })
// Incrementar valor numéricodb.usuarios.updateOne( { email: "juan@email.com" }, { $inc: { edad: 1 } })
// Añadir a un arraydb.usuarios.updateOne( { email: "juan@email.com" }, { $push: { tags: "premium" } })
// Reemplazar documento completodb.usuarios.replaceOne( { email: "juan@email.com" }, { nombre: "Juan", email: "nuevo@email.com" })
// Actualizar o insertar (upsert)db.usuarios.updateOne( { email: "nuevo@email.com" }, { $set: { nombre: "Nuevo", edad: 20 } }, { upsert: true })Eliminar documentos
Section titled “Eliminar documentos”// Eliminar un documentodb.usuarios.deleteOne({ email: "juan@email.com" })
// Eliminar varios documentosdb.usuarios.deleteMany({ activo: false })
// Eliminar todos los documentosdb.usuarios.deleteMany({})Consultas avanzadas
Section titled “Consultas avanzadas”// Agregación (GROUP BY equivalente)db.usuarios.aggregate([ { $group: { _id: "$edad", total: { $sum: 1 } } }])
// Proyecciones en agregacióndb.usuarios.aggregate([ { $match: { edad: { $gte: 25 } } }, { $group: { _id: null, promedio: { $avg: "$edad" } } }])
// Lookup (JOIN equivalente)db.pedidos.aggregate([ { $lookup: { from: "usuarios", localField: "usuario_id", foreignField: "_id", as: "usuario" } }])
// Desenrollar arraysdb.usuarios.aggregate([ { $unwind: "$tags" }, { $group: { _id: "$tags", total: { $sum: 1 } } }])Índices
Section titled “Índices”// Crear índice simpledb.usuarios.createIndex({ email: 1 }) // 1 = ascendente, -1 = descendente
// Crear índice únicodb.usuarios.createIndex({ email: 1 }, { unique: true })
// Crear índice compuestodb.usuarios.createIndex({ nombre: 1, edad: -1 })
// Crear índice de textodb.usuarios.createIndex({ nombre: "text", descripcion: "text" })
// Ver índicesdb.usuarios.getIndexes()
// Eliminar índicedb.usuarios.dropIndex("email_1")Gestión de usuarios
Section titled “Gestión de usuarios”// Crear usuario administradoruse admindb.createUser({ user: "admin", pwd: "contraseña_segura", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]})
// Crear usuario para una base de datosuse mi_bddb.createUser({ user: "lector", pwd: "contraseña", roles: [{ role: "read", db: "mi_bd" }]})
// Ver usuariosdb.getUsers()
// Eliminar usuariodb.dropUser("lector")Respaldo y restauración
Section titled “Respaldo y restauración”# Backup de una base de datosmongodump --db nombre_bd --out /backup/
# Backup con autenticaciónmongodump --username usuario --password pass --db nombre_bd --out /backup/
# Restaurar base de datosmongorestore --db nombre_bd /backup/nombre_bd/
# Backup de todas las bases de datosmongodump --out /backup/completo/
# Restaurar todomongorestore /backup/completo/Comandos útiles desde terminal
Section titled “Comandos útiles desde terminal”# Ver estado del serviciosudo systemctl status mongod
# Reiniciar MongoDBsudo systemctl restart mongod
# Conectar y ejecutar comandomongosh --eval "use mi_bd; db.usuarios.find()"
# Exportar a JSONmongoexport --db mi_bd --collection usuarios --out usuarios.json
# Importar desde JSONmongoimport --db mi_bd --collection usuarios --file usuarios.jsonMonitoreo
Section titled “Monitoreo”// Estadísticas del servidordb.serverStatus()
// Estadísticas de la base de datosdb.stats()
// Ver operaciones actualesdb.currentOp()
// Matar una operacióndb.killOp(opid)
// Ver tamaño de coleccionesdb.usuarios.stats()
// Ver todos los índices y su tamañodb.usuarios.aggregate([ { $indexStats: {} }])En MongoDB, las bases de datos y colecciones se crean automáticamente al insertar el primer documento. Recuerda que los comandos en el shell de MongoDB usan sintaxis JavaScript, por lo que las funciones y objetos son similares.