Introducción a MongoDB


¿Qué es MongoDB?

MongoDB es una base de datos NoSQL orientada a documentos. A diferencia de las bases de datos relacionales como MySQL o PostgreSQL, MongoDB almacena datos en formato JSON (BSON, Binary JSON) en lugar de tablas con filas y columnas. Es ideal para aplicaciones que requieren flexibilidad en el esquema y escalabilidad horizontal.


Características principales

  • Orientado a documentos: Almacena datos en formato JSON/BSON
  • Sin esquema fijo: No requiere definir la estructura de antemano
  • Escalabilidad horizontal: Fácil de distribuir en múltiples servidores
  • Consultas potentes: Soporta búsquedas complejas y agregaciones
  • Índices: Soporta índices para mejorar el rendimiento

Instalar MongoDB en Linux

En Ubuntu/Debian:

# Importar clave GPG
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

# Agregar repositorio
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

# Instalar
sudo apt-get update
sudo apt-get install -y mongodb-org

# Iniciar MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod

En CentOS/RHEL:

# Crear archivo de repositorio
sudo nano /etc/yum.repos.d/mongodb-org-6.0.repo

# Agregar contenido:
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

# Instalar
sudo yum install -y mongodb-org

# Iniciar
sudo systemctl start mongod
sudo systemctl enable mongod

Verificar instalación

sudo systemctl status mongod
mongod --version

Conectarse a MongoDB

Desde la terminal:

mongosh

O con autenticación:

mongosh -u usuario -p contraseña --authenticationDatabase admin

Conceptos básicos

Base de datos: Similar a MySQL, pero no necesitas crearla explícitamente. Se crea al insertar el primer documento.

Colección: Equivalente a una tabla en SQL. Contiene documentos.

Documento: Equivalente a una fila en SQL. Es un objeto JSON/BSON.

Campo: Equivalente a una columna en SQL. Es una propiedad del documento.


Comandos básicos

Ver bases de datos:

show dbs

Usar una base de datos:

use nombre_base_datos

Ver colecciones:

show collections

Crear una colección (implícito al insertar):

db.nombre_coleccion.insertOne({campo: "valor"})

Operaciones CRUD básicas

Insertar documentos:

// Insertar un documento
db.usuarios.insertOne({
    nombre: "Juan",
    email: "[email protected]",
    edad: 30
})

// Insertar múltiples documentos
db.usuarios.insertMany([
    {nombre: "María", email: "[email protected]", edad: 25},
    {nombre: "Pedro", email: "[email protected]", edad: 35}
])

Consultar documentos:

// Consultar todos
db.usuarios.find()

// Consultar con filtro
db.usuarios.find({nombre: "Juan"})

// Consultar uno
db.usuarios.findOne({edad: {$gt: 30}})

// Consultar con formato legible
db.usuarios.find().pretty()

Actualizar documentos:

// Actualizar uno
db.usuarios.updateOne(
    {nombre: "Juan"},
    {$set: {edad: 31}}
)

// Actualizar múltiples
db.usuarios.updateMany(
    {edad: {$lt: 30}},
    {$set: {categoria: "joven"}}
)

Eliminar documentos:

// Eliminar uno
db.usuarios.deleteOne({nombre: "Juan"})

// Eliminar múltiples
db.usuarios.deleteMany({edad: {$lt: 18}})

Operadores de consulta comunes

// Mayor que
db.usuarios.find({edad: {$gt: 25}})

// Menor que
db.usuarios.find({edad: {$lt: 40}})

// Mayor o igual
db.usuarios.find({edad: {$gte: 18}})

// Menor o igual
db.usuarios.find({edad: {$lte: 65}})

// Diferente de
db.usuarios.find({nombre: {$ne: "Juan"}})

// En array
db.usuarios.find({categoria: {$in: ["admin", "moderador"]}})

// No en array
db.usuarios.find({categoria: {$nin: ["banned"]}})

// Y lógico
db.usuarios.find({$and: [{edad: {$gt: 18}}, {edad: {$lt: 65}}]})

// O lógico
db.usuarios.find({$or: [{nombre: "Juan"}, {nombre: "María"}]})

Índices

Los índices mejoran el rendimiento de las consultas:

// Crear índice en un campo
db.usuarios.createIndex({email: 1})

// Crear índice único
db.usuarios.createIndex({email: 1}, {unique: true})

// Crear índice compuesto
db.usuarios.createIndex({nombre: 1, edad: -1})

// Ver índices
db.usuarios.getIndexes()

// Eliminar índice
db.usuarios.dropIndex({email: 1})

Agregaciones

Las agregaciones permiten procesar y transformar datos:

// Contar documentos
db.usuarios.countDocuments({edad: {$gt: 25}})

// Agregación simple (equivalente a GROUP BY)
db.usuarios.aggregate([
    {$group: {_id: "$categoria", total: {$sum: 1}}}
])

// Agregación con múltiples etapas
db.usuarios.aggregate([
    {$match: {edad: {$gte: 18}}},
    {$group: {_id: "$categoria", promedio: {$avg: "$edad"}}},
    {$sort: {promedio: -1}}
])

Configurar autenticación

1. Conectarse sin autenticación (primera vez):

mongosh

2. Crear usuario administrador:

use admin
db.createUser({
    user: "admin",
    pwd: "contraseña_segura",
    roles: ["root"]
})

3. Habilitar autenticación:

sudo nano /etc/mongod.conf

Descomentá o agregá:

security:
  authorization: enabled

4. Reiniciar MongoDB:

sudo systemctl restart mongod

Hacer backup y restaurar

Backup:

mongodump --db nombre_base_datos --out /ruta/backup/

Backup con autenticación:

mongodump --db nombre_base_datos -u usuario -p contraseña --authenticationDatabase admin --out /ruta/backup/

Restaurar:

mongorestore --db nombre_base_datos /ruta/backup/nombre_base_datos/

Ventajas y desventajas

Ventajas:

  • Flexibilidad en el esquema
  • Escalabilidad horizontal fácil
  • Rápido para desarrollo
  • Buen rendimiento con grandes volúmenes de datos

Desventajas:

  • No soporta transacciones complejas (aunque MongoDB 4.0+ las soporta)
  • Consume más memoria que bases de datos relacionales
  • Curva de aprendizaje si vienes de SQL

¿Cuándo usar MongoDB?

  • Aplicaciones con esquemas que cambian frecuentemente
  • Contenido generado por usuarios (redes sociales, blogs)
  • Catálogos de productos con atributos variables
  • Aplicaciones que requieren escalabilidad horizontal
  • Datos que no encajan bien en tablas relacionales

¿Necesitás ayuda?

Si tenés dudas sobre MongoDB o necesitás ayuda configurándolo, abrí un ticket desde el panel de billing.baires.host o contactanos por soporte.

También podés escribirnos por nuestras redes:

¿Fue útil la respuesta? 0 Los Usuarios han Encontrado Esto Útil (0 Votos)