Conceptos de MongoDB
MongoDB es una base de datos diseñada para escalabilidad, alto rendimiento y alta disponibilidad. En MongoDB, una base de datos contiene colecciones (collections), que son equivalentes a las tablas en las bases de datos relacionales. Los registros en MongoDB son documentos (documents), estructuras de datos compuestas por pares campo-valor. Los documentos de MongoDB son similares a objetos JSON, y los valores de los campos pueden incluir otros documentos, arrays y arrays de documentos. MongoDB soporta diversos tipos de datos como: Int, Double, String, Object, Array, Binary data, Undefined, Boolean, Date, Null, entre otros.
Comandos básicos
db.help()- Ver comadnos a nivel de base de datosdb.miColeccion.help()- Ver comandos a nivel de colecciónsh.help()- Ver comandos de fragmentaciónrs.help()- Ver comandos de conjuntos de réplicahelp admin- Ver comandos de administraciónshow dbs- Listar bases de datos existentesshow collections- Listar colecciones en la base de datos actualuse <nombre_base></nombre_base>- Cambiar a una base de datos específicaexit- Salir de la shell de MongoDB
Operaciones CRUD
Las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) son fundamnetales en MongoDB:
// Insertar un documento
db.estudiantes.insert({nombre:"Carlos", edad:22})
// Listar colecciones existentes
show collections
// Ver estadísticas de una colección
db.estudiantes.stats()
// Consultar documentos
db.estudiantes.find()
// Contar documentos en una colección
db.estudiantes.count()
Consultas avanzadas
Operadores de comparación:
$gt- Mayor que$gte- Mayor o igual que$lt- Menor que$lte- Menor o igual que$in- Dentro de un rango especificado$nin- Fuera de un rango especificado
Operadores lógicos:
$or- Operador OR$and- Operador AND$not- Operador NOT$nor- Operador NOR
Consultas de elementos:
$exists- Consultar documentos que contengan un campo específico$mod- Operación módulo$type- Devolver documentos donde el campo tiene un tipo específico
Operaciones de actualización:
$set- Actualizar o insertar valor de campo$unset- Eliminar un campo específico$rename- Renombrar un campo$inc- Incrementar el valor de un campo numérico
Gestión de permisos en MongoDB
MongoDB proporciona un sistema robusto de control de acceso basado en roles. Para crear usuarios con diferentes niveles de acceso:
// Crear un usuario con rol root
db.createUser({
user:"admin",
pwd:"contraseña123",
roles: [{ role: "root", db: "admin" }]
});
// Crear un usuario con permisos de lectura/escritura en una base de datos específica
db.createUser({
user:"usuario_normal",
pwd:"mi_contraseña",
roles: [{ role: "readWrite", db: "mi_base_datos" }]
});
// Eliminar un usuario
db.system.users.remove({user:"nombre_usuario"});
Tipos de roles integrados:
- Roles de usuario de base de datos: read, readWrite
- Roles de administración de base de datos: dbAdmin, dbOwner, userAdmin
- Roles de administración de clúster: clusterAdmin, clusterManager, clusterMonitor, hostManager
- Roles de respaldo y restauración: backup, restore
- Roles de todas las bases de datos: readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase
- Rol de superusuario: root
Índices en MongoDB
Los índices en MongoDB son fundamentales para optimizar el rendimiento de las consultas, similar a los índices en bases de datos relacionales:
// Crear un índice en un campo
db.estudiantes.createIndex({nombre: 1}) // 1 para orden ascendente, -1 para descendente
// Ver índices existentes
db.estudiantes.getIndexes()
// Ver si una consulta utiliza índices
db.estudiantes.find({"nombre": "Carlos"}).explain()
// Eliminar un índice
db.estudiantes.dropIndex("nombre_1")
// Crear un índice único
db.estudiantes.createIndex({email: 1}, {unique: true})
Los índices almacenan valores de campos específicos en una estructura ordenada, lo que permite a MongoDB realizar búsquedas eficientes sin necesidad de escanear toda la colección.