Uso de MongoDB

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 datos
  • db.miColeccion.help() - Ver comandos a nivel de colección
  • sh.help() - Ver comandos de fragmentación
  • rs.help() - Ver comandos de conjuntos de réplica
  • help admin - Ver comandos de administración
  • show dbs - Listar bases de datos existentes
  • show collections - Listar colecciones en la base de datos actual
  • use <nombre_base></nombre_base> - Cambiar a una base de datos específica
  • exit - 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.

Etiquetas: MongoDB NoSQL bases de datos CRUD Índices

Publicado el 6-6 01:59