15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
01.11.2024
2 +1

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ísticaMongoDB (NoSQL)SQL Tradicional
Modelo de datosDocumentos flexibles (BSON)Esquema fijo (tablas/filas)
EscalabilidadHorizontal (sharding)Principalmente vertical
Cambios de esquemaSin esquema, dinámicoRequiere migraciones
Lenguaje de consultaMQL rico + agregaciónSQL
Mejor paraDatos dinámicos, no estructuradosDatos estructurados, relacionales
Rendimiento a escalaExcelente con shardingPuede 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() y skip()
  • 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 update

Paso 4: Instalar MongoDB

Instala la última versión estable de MongoDB con todos los componentes requeridos:

sudo apt install -y mongodb-org

Esto instala los siguientes paquetes:

  • mongod — el daemon de la base de datos MongoDB
  • mongos — el enrutador de sharding de MongoDB
  • mongosh — el shell de MongoDB (reemplazo moderno del shell legado mongo)
  • Herramientas y librerías de MongoDB

Paso 5: Iniciar y habilitar el servicio MongoDB

Inicia el servicio MongoDB inmediatamente:

sudo systemctl start mongod

Habilita MongoDB para que se inicie automáticamente en el arranque del sistema:

sudo systemctl enable mongod

Verifica que MongoDB se está ejecutando correctamente:

sudo systemctl status mongod

Deberí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:

mongosh

Dentro 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.conf

Encuentra la sección security y agrega:

security:
  authorization: enabled

Reinicia MongoDB para aplicar los cambios:

sudo systemctl restart mongod

A 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:

mongosh

Si la autenticación está habilitada, conéctate con credenciales:

mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase admin

Paso 2: Operaciones de base de datos

Listar todas las bases de datos:

show dbs

Crear 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:

db

Eliminar 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 collections

Eliminar 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 })  // Descending

Limitar 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

  1. Asignar RAM suficiente — El motor de almacenamiento WiredTiger de MongoDB utiliza un caché en memoria. Establece cacheSizeGB a aproximadamente el 50% de la RAM del sistema disponible.
  2. Usar índices apropiados — Analiza consultas lentas con db.collection.explain("executionStats") y crea índices en consecuencia.
  3. Monitorear con MongoDB Atlas o mongostat — Usa las herramientas de línea de comandos mongostat y mongotop para monitorear el rendimiento en tiempo real.
  4. Habilitar journaling — El journaling está habilitado por defecto y proporciona recuperación ante fallos; no lo desactives en producción.
  5. Usar connection pooling — Configura el driver de MongoDB de tu aplicación para usar connection pooling y reducir la sobrecarga de conexión.
  6. 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 -e

Agrega 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>&1

Eligiendo 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 usoPlan recomendadoPor qué
Desarrollo / PruebasVPS HostingRentable, control total, configuración fácil
Producción pequeña a medianaVPS HostingRecursos escalables, almacenamiento SSD, acceso root
Producción de alto tráficoServidores DedicadosRendimiento bare-metal, sin compartir recursos
ML/AI con MongoDBGPU HostingAceleración GPU para cargas de trabajo de procesamiento de datos
Aplicación web + MongoDBVPS con cPanelInterfaz 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

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar