Guía Completa de MongoDB: Instalación, Características y Mejores Prácticas en un VPS
MongoDB es una de las bases de datos NoSQL más poderosas y ampliamente adoptadas del mundo — y por una buena razón. Su arquitectura flexible orientada a documentos la convierte en la opción preferida para desarrolladores que construyen aplicaciones modernas e intensivas en datos que necesitan escalar rápidamente. Ya sea que estés ejecutando un MVP de startup o gestionando infraestructura de nivel empresarial, MongoDB combinado con un entorno de hosting de alto rendimiento te proporciona la velocidad, flexibilidad y confiabilidad que tus aplicaciones demandan.
En esta guía completa, aprenderás qué es MongoDB, por qué se destaca de las bases de datos relacionales tradicionales, cómo instalarlo en Ubuntu y cómo realizar operaciones esenciales usando el shell de MongoDB.
¿Qué es MongoDB y por qué deberías usarlo?
MongoDB es una base de datos NoSQL de código abierto orientada a documentos que almacena datos en documentos flexibles similares a JSON llamados BSON (JSON Binario). A diferencia de las bases de datos relacionales tradicionales que se basan en estructuras rígidas de tabla-fila-columna, MongoDB permite que cada documento en una colección tenga su propia estructura única. Esto la hace excepcionalmente adecuada para aplicaciones con modelos de datos en evolución o impredecibles.
Ventajas clave de MongoDB sobre bases de datos SQL tradicionales
| Característica | MongoDB (NoSQL) | SQL Tradicional |
|---|---|---|
| Modelo de datos | Documentos flexibles (BSON) | Esquema fijo (tablas/filas) |
| Escalabilidad | Horizontal (sharding) | Principalmente vertical |
| Cambios de esquema | Sin esquema, dinámico | Requiere migraciones |
| Lenguaje de consulta | MQL rico + agregación | SQL |
| Mejor para | Datos dinámicos, no estructurados | Datos estructurados, relacionales |
| Rendimiento a escala | Excelente con sharding | Puede degradarse sin ajuste |
MongoDB es ideal para una amplia gama de casos de uso incluyendo análisis en tiempo real, sistemas de gestión de contenidos, plataformas de comercio electrónico, ingesta de datos IoT, backends móviles y cualquier aplicación donde las estructuras de datos probablemente cambien con el tiempo.
¿Por qué alojar MongoDB en un VPS?
Alojar MongoDB en un servidor privado virtual dedicado te proporciona un nivel de control, rendimiento y seguridad que los entornos compartidos simplemente no pueden ofrecer. Con un plan de VPS Hosting de AlexHost, obtienes:
- Acceso root completo para configurar MongoDB exactamente como tu aplicación lo requiere
- Recursos dedicados de RAM y CPU para manejar cargas de trabajo exigentes de lectura/escritura
- Entorno aislado que elimina el problema del “vecino ruidoso” común en hosting compartido
- Escalado vertical y horizontal sin problemas a medida que tus datos crecen
- Reglas de firewall y red personalizadas para bloquear el acceso a la base de datos
Para aplicaciones con requisitos de rendimiento excepcionalmente altos, los Servidores Dedicados de AlexHost ofrecen rendimiento bare-metal con aislamiento completo de hardware — el estándar de oro para implementaciones de MongoDB en producción.
Sección 1: Entendiendo la arquitectura central de MongoDB
Antes de sumergirte en la instalación, es importante entender cómo MongoDB organiza y gestiona datos.
Documentos
La unidad fundamental de datos en MongoDB es un documento — un objeto similar a JSON que puede contener campos anidados, arrays y tipos de datos mixtos. Por ejemplo:
{
"_id": ObjectId("64b1f2c3e4b0a1d2e3f4a5b6"),
"name": "Alice",
"age": 30,
"email": "alice@example.com",
"address": {
"city": "New York",
"zip": "10001"
},
"tags": ["developer", "mongodb", "nodejs"]
}Colecciones
Los documentos se agrupan en colecciones, que son análogas a las tablas en bases de datos SQL. Sin embargo, a diferencia de las tablas SQL, las colecciones no imponen un esquema fijo — los documentos dentro de la misma colección pueden tener campos completamente diferentes.
Bases de datos
Un servidor MongoDB puede alojar múltiples bases de datos, cada una conteniendo su propio conjunto de colecciones. Esto facilita aislar datos para diferentes aplicaciones o entornos (por ejemplo, desarrollo, staging, producción) en una única instancia de servidor.
Sección 2: Características clave de MongoDB
2.1 Almacenamiento orientado a documentos
El modelo de documentos de MongoDB es una de sus características más poderosas. Debido a que cada documento puede tener una estructura diferente, los desarrolladores pueden evolucionar el esquema de la base de datos orgánicamente a medida que los requisitos de la aplicación cambian — sin ejecutar migraciones complejas de ALTER TABLE ni experimentar tiempo de inactividad.
Esta flexibilidad es particularmente valiosa en entornos de desarrollo ágil donde los requisitos cambian frecuentemente, o en aplicaciones que agregan datos de múltiples fuentes heterogéneas.
2.2 Escalabilidad horizontal con Sharding
Una de las capacidades definitorias de MongoDB es su soporte nativo para escalado horizontal a través de sharding. El sharding distribuye datos entre múltiples servidores (llamados shards), permitiendo que MongoDB maneje volúmenes de datos y niveles de rendimiento que abrumarían una máquina única.
Cada shard contiene un subconjunto de los datos totales, y un enrutador mongos dirige las consultas al shard o shards apropiados basándose en una clave de shard configurable. Esta arquitectura permite escalabilidad casi lineal a medida que tu volumen de datos y carga de consultas crecen.
Para entornos de producción de alto tráfico, alojar MongoDB en los Servidores Dedicados de AlexHost asegura que cada shard tenga acceso a recursos de hardware aislados y de alto rendimiento.
2.3 Alta disponibilidad con Replica Sets
MongoDB proporciona tolerancia a fallos integrada a través de replica sets — grupos de instancias de MongoDB que mantienen copias idénticas de los mismos datos. Un replica set consiste en:
- Un nodo primario que recibe todas las operaciones de escritura
- Uno o más nodos secundarios que replican datos del primario
- Un árbitro opcional que participa en elecciones sin almacenar datos
Si el nodo primario falla, el replica set automáticamente elige un nuevo primario de los secundarios disponibles, minimizando el tiempo de inactividad y asegurando la durabilidad de los datos.
2.4 Lenguaje de consulta poderoso y marco de agregación
El Lenguaje de Consulta de MongoDB (MQL) de MongoDB soporta un conjunto rico de operaciones incluyendo:
- Filtrado a nivel de campo con operadores de comparación, lógicos y de elemento
- Proyección para devolver solo campos específicos
- Ordenamiento y paginación con
sort(),limit()yskip() - Búsqueda de texto con índices de texto completo
- Consultas geoespaciales para aplicaciones basadas en ubicación
El Marco de Agregación proporciona un enfoque basado en pipeline para transformación y análisis de datos, soportando operaciones como $match, $group, $sort, $project, $lookup (uniones), $unwind y muchas más — ofreciendo funcionalidad comparable a operaciones complejas de GROUP BY y JOIN de SQL.
2.5 Indexación flexible
MongoDB soporta múltiples tipos de índices para optimizar el rendimiento de consultas:
- Índices de campo único para consultas simples
- Índices compuestos para consultas de múltiples campos
- Índices multikey para campos de array
- Índices de texto para búsqueda de texto completo
- Índices geoespaciales para consultas de ubicación
- Índices TTL para expiración automática de documentos (útil para datos de sesión o logs)
Sección 3: Instalando MongoDB en Ubuntu (Paso a paso)
Esta sección te guía a través de una instalación completa de MongoDB en Ubuntu 20.04 LTS (Focal Fossa). Estos pasos están optimizados para un entorno VPS de AlexHost con acceso root o sudo.
Requisitos previos
- Servidor Ubuntu 20.04 LTS
- Una cuenta de usuario con privilegios
sudo - Familiaridad básica con la línea de comandos de Linux
Si aún no tienes un servidor, puedes crear un VPS Ubuntu completamente configurado en minutos con AlexHost VPS Hosting.
Paso 1: Importar la clave pública GPG de MongoDB
Los paquetes de MongoDB están firmados con una clave GPG para verificar su autenticidad. Importa la clave con el siguiente comando:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -Deberías ver OK como salida, confirmando que la clave fue importada exitosamente.
Paso 2: Agregar el repositorio de MongoDB
Crea un archivo de lista para agregar el repositorio oficial de MongoDB a las fuentes de paquetes de tu sistema:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list> Nota: Este comando agrega el repositorio de MongoDB 6.0. Ajusta el número de versión si necesitas una versión diferente.
Paso 3: Actualizar la base de datos de paquetes
Actualiza tu índice de paquetes local para incluir el repositorio de MongoDB recién agregado:
sudo apt updatePaso 4: Instalar MongoDB
Instala la última versión estable de MongoDB con todos los componentes requeridos:
sudo apt install -y mongodb-orgEsto instala los siguientes paquetes:
mongod— el daemon de la base de datos MongoDBmongos— el enrutador de sharding de MongoDBmongosh— el shell de MongoDB (reemplazo moderno del shell legadomongo)- Herramientas y librerías de MongoDB
Paso 5: Iniciar y habilitar el servicio MongoDB
Inicia el servicio MongoDB inmediatamente:
sudo systemctl start mongodHabilita MongoDB para que se inicie automáticamente en el arranque del sistema:
sudo systemctl enable mongodVerifica que MongoDB se está ejecutando correctamente:
sudo systemctl status mongodDeberías ver salida indicando que el servicio está active (running). Si MongoDB se inició exitosamente, también verás una línea confirmando que está escuchando en el puerto 27017.
Paso 6: Asegurar tu instalación de MongoDB (Recomendado)
Antes de usar MongoDB en cualquier entorno de producción o accesible desde internet, es crítico habilitar la autenticación. Por defecto, MongoDB no requiere nombre de usuario o contraseña.
Crear un usuario administrativo:
mongoshDentro del shell de MongoDB:
use admin
db.createUser({
user: "adminUser",
pwd: "YourStrongPasswordHere",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})Habilitar autenticación editando el archivo de configuración de MongoDB:
sudo nano /etc/mongod.confEncuentra la sección security y agrega:
security:
authorization: enabledReinicia MongoDB para aplicar los cambios:
sudo systemctl restart mongodA partir de este momento, todas las conexiones a MongoDB requerirán credenciales válidas.
Sección 4: Usando MongoDB — Comandos y operaciones esenciales
Con MongoDB instalado y asegurado, exploremos las operaciones más importantes que usarás día a día.
Paso 1: Acceder al shell de MongoDB
Conéctate a tu instancia de MongoDB usando el shell moderno mongosh:
mongoshSi la autenticación está habilitada, conéctate con credenciales:
mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase adminPaso 2: Operaciones de base de datos
Listar todas las bases de datos:
show dbsCrear o cambiar a una base de datos:
use mydatabase> MongoDB crea la base de datos automáticamente cuando primero insertas datos en ella.
Verificar la base de datos actualmente seleccionada:
dbEliminar una base de datos:
db.dropDatabase()Paso 3: Operaciones de colección
Crear una colección explícitamente:
db.createCollection("users")Listar todas las colecciones en la base de datos actual:
show collectionsEliminar una colección:
db.users.drop()Paso 4: Operaciones CRUD de documentos
#### Insertar documentos
Insertar un único documento:
db.users.insertOne({
name: "Alice",
age: 30,
email: "alice@example.com",
role: "developer"
})Insertar múltiples documentos a la vez:
db.users.insertMany([
{ name: "Bob", age: 25, email: "bob@example.com", role: "designer" },
{ name: "Carol", age: 35, email: "carol@example.com", role: "manager" },
{ name: "Dave", age: 28, email: "dave@example.com", role: "developer" }
])#### Leer documentos
Encontrar todos los documentos en una colección:
db.users.find()Encontrar documentos con una condición específica:
db.users.find({ role: "developer" })Encontrar documentos con múltiples condiciones:
db.users.find({ role: "developer", age: { $gte: 28 } })Devolver solo campos específicos (proyección):
db.users.find({ role: "developer" }, { name: 1, email: 1, _id: 0 })Encontrar un único documento:
db.users.findOne({ name: "Alice" })Ordenar resultados:
db.users.find().sort({ age: 1 }) // Ascending
db.users.find().sort({ age: -1 }) // DescendingLimitar y paginar resultados:
db.users.find().limit(10).skip(20) // Page 3 with 10 results per page#### Actualizar documentos
Actualizar un único documento:
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 31, role: "senior developer" } }
)Actualizar múltiples documentos:
db.users.updateMany(
{ role: "developer" },
{ $set: { department: "Engineering" } }
)Incrementar un campo numérico:
db.users.updateOne(
{ name: "Bob" },
{ $inc: { age: 1 } }
)#### Eliminar documentos
Eliminar un único documento:
db.users.deleteOne({ name: "Dave" })Eliminar múltiples documentos que coincidan con una condición:
db.users.deleteMany({ role: "designer" })Paso 5: Indexación para rendimiento
Crear índices en campos consultados frecuentemente mejora dramáticamente el rendimiento de consultas.
Crear un índice de campo único:
db.users.createIndex({ email: 1 })Crear un índice compuesto:
db.users.createIndex({ role: 1, age: -1 })Crear un índice único:
db.users.createIndex({ email: 1 }, { unique: true })Listar todos los índices en una colección:
db.users.getIndexes()Paso 6: Pipeline de agregación
El marco de agregación te permite realizar análisis de datos complejos directamente dentro de MongoDB.
Ejemplo: Contar usuarios por rol y ordenar por conteo:
db.users.aggregate([
{ $group: { _id: "$role", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
])Ejemplo: Filtrar, agrupar y calcular edad promedio por rol:
db.users.aggregate([
{ $match: { department: "Engineering" } },
{ $group: { _id: "$role", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
{ $sort: { avgAge: 1 } }
])Sección 5: Configuración de MongoDB y ajuste de rendimiento
Configurando mongod.conf
El archivo de configuración principal de MongoDB se encuentra en /etc/mongod.conf. Configuraciones clave a revisar y optimizar:
# Network settings
net:
port: 27017
bindIp: 127.0.0.1 # Restrict to localhost for security; use server IP for remote access
# Storage settings
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2 # Set to ~50% of available RAM
# Logging
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Security
security:
authorization: enabled
# Replication (for replica sets)
replication:
replSetName: "rs0"Mejores prácticas de rendimiento
- Asignar RAM suficiente — El motor de almacenamiento WiredTiger de MongoDB utiliza un caché en memoria. Establece
cacheSizeGBa aproximadamente el 50% de la RAM del sistema disponible. - Usar índices apropiados — Analiza consultas lentas con
db.collection.explain("executionStats")y crea índices en consecuencia. - Monitorear con MongoDB Atlas o mongostat — Usa las herramientas de línea de comandos
mongostatymongotoppara monitorear el rendimiento en tiempo real. - Habilitar journaling — El journaling está habilitado por defecto y proporciona recuperación ante fallos; no lo desactives en producción.
- Usar connection pooling — Configura el driver de MongoDB de tu aplicación para usar connection pooling y reducir la sobrecarga de conexión.
- Compactar colecciones regularmente — Usa
db.runCommand({ compact: "collectionName" })para recuperar espacio en disco después de eliminaciones grandes.
Sección 6: Haciendo copias de seguridad y restaurando MongoDB
Las copias de seguridad regulares son esenciales para cualquier base de datos en producción. MongoDB proporciona herramientas integradas para este propósito.
Crear una copia de seguridad con mongodump
mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d)Restaurar desde una copia de seguridad con mongorestore
mongorestore --uri="mongodb://adminUser:password@localhost:27017" /backup/mongodb/20240115/Automatizar copias de seguridad con Cron
Agrega un trabajo cron para ejecutar copias de seguridad diarias automáticamente:
sudo crontab -eAgrega la siguiente línea para ejecutar una copia de seguridad cada día a las 2:00 AM:
0 2 * * * mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d) >> /var/log/mongodb-backup.log 2>&1Eligiendo el plan correcto de AlexHost para MongoDB
El plan de hosting correcto depende de la escala, tráfico y requisitos de datos de tu aplicación:
| Caso de uso | Plan recomendado | Por qué |
|---|---|---|
| Desarrollo / Pruebas | VPS Hosting | Rentable, control total, configuración fácil |
| Producción pequeña a mediana | VPS Hosting | Recursos escalables, almacenamiento SSD, acceso root |
| Producción de alto tráfico | Servidores Dedicados | Rendimiento bare-metal, sin compartir recursos |
| ML/AI con MongoDB | GPU Hosting | Aceleración GPU para cargas de trabajo de procesamiento de datos |
| Aplicación web + MongoDB | VPS con cPanel | Interfaz de gestión fácil junto a tu base de datos |
Para aplicaciones que también requieren un frontend web, notificaciones por correo electrónico o conexiones aseguradas con SSL, AlexHost ofrece Certificados SSL y Email Hosting para completar tu pila de infraestructura.
Preguntas frecuentes
P: ¿Es MongoDB gratuito para usar?
Sí. MongoDB Community Edition es gratuito y de código abierto bajo la Licencia Pública del Lado del Servidor (SSPL). MongoDB Enterprise y MongoDB Atlas (nube) ofrecen características adicionales en base de pago.
P: ¿Qué puerto usa MongoDB por defecto?
MongoDB escucha en el puerto 27017 por defecto. Puedes cambiar esto en /etc/mongod.conf.
P: ¿Puedo ejecutar MongoDB en un plan de hosting compartido?
MongoDB requiere acceso root o administrativo para instalar y configurar correctamente, lo cual no está disponible en hosting compartido estándar. Se requiere un VPS o servidor dedicado. El Hosting web compartido de AlexHost es más adecuado para aplicaciones PHP/MySQL, mientras que las implementaciones de MongoDB deben usar un VPS o servidor dedicado.
P: ¿Cómo me conecto a MongoDB desde una aplicación remota?
Actualiza bindIp en /etc/mongod.conf para incluir la dirección IP de tu servidor, configura tu firewall para permitir el puerto 27017 solo desde IPs confiables y usa una cadena de conexión en el formato: mongodb://username:password@your-server-ip:27017/dbname.
P: ¿Cuál es la diferencia entre MongoDB y MySQL?
MySQL es una base de datos relacional que usa tablas estructuradas y SQL. MongoDB es una base de datos de documentos NoSQL que almacena documentos JSON-like flexibles. MongoDB destaca en mane
