Curso
MongoDB es una base de datos NoSQL que utiliza un enfoque flexible, basado en documentos, para almacenar datos en documentos de estilo JSON organizados en colecciones. En pocas palabras, cuando trabajas con MongoDB, tus datos se guardan en un formato muy parecido a JSON. Esto facilita la lectura, el mapeo al código y la escalabilidad. MongoDB es moderno y sigue un enfoque distinto al de las bases de datos relacionales. Las relacionales almacenan datos en filas y tablas. Este enfoque tiene ventajas, pero uno de sus grandes retos es crear relaciones mediante tablas adicionales. MongoDB resuelve este problema introduciendo un esquema flexible en el que los datos se almacenan en colecciones y no en tablas. Esto permite guardar juntos, dentro del propio objeto, los datos relacionados con él. En este tutorial, veremos siete conceptos que toda persona principiante debería dominar al usar MongoDB. Dicho esto, vamos al lío.
Entender NoSQL y las bases de datos de documentos
Cuando la mayoría piensa en bases de datos, piensa en SQL, que almacena datos en filas, tablas y relaciones. Esto funciona genial para muchas aplicaciones, sobre todo cuando los datos están bien estructurados. Pero puede resultar limitado cuando los datos no encajan perfectamente en una tabla.
Ahí es donde entra NoSQL. NoSQL significa simplemente “no solo SQL”. Abarca una familia de bases de datos que se alejan del modelo rígido de tablas para ofrecer más flexibilidad. En lugar de forzar todos tus datos en columnas predefinidas, puedes estructurarlos de un modo que refleje cómo funciona realmente tu aplicación.
MongoDB es una base de datos de documentos, uno de los tipos de NoSQL más populares. En lugar de filas y tablas, los datos se almacenan como documentos dentro de colecciones. Cada documento se parece mucho a un JSON, con pares clave-valor, arrays e incluso objetos anidados. Esto facilita muchísimo representar datos del mundo real. Un buen ejemplo es un perfil de usuario con direcciones y preferencias en un único registro, sin tener que repartirlo en varias tablas. Veamos cómo sería ese perfil de usuario con direcciones y preferencias en un único registro en MongoDB.
{
"_id": "u123",
"name": "Moses Anu",
"email": "moses@example.com",
"addresses": [
{ "type": "home", "city": "Abuja" },
{ "type": "work", "city": "Lagos" }
],
"preferences": {
"language": "English",
"theme": "dark"
}
}
Conceptos básicos de la arquitectura de MongoDB
Para trabajar bien con MongoDB, conviene entender cómo se organiza la información en una base de datos MongoDB. A diferencia de SQL, donde los datos se estructuran en tablas y filas, MongoDB utiliza colecciones y documentos.
- Base de datos: Piensa en ella como el contenedor de todo. Igual que puedes tener varias bases de datos en MySQL, MongoDB también te da la flexibilidad de múltiples bases para distintos proyectos o aplicaciones.
- Colección: Dentro de cada base de datos tienes colecciones. Piensa en una colección como en una tabla con un esquema muy flexible. MongoDB no impone un esquema estricto: puedes guardar en la misma colección documentos con campos distintos.
- Documento: Aquí está la magia. Un documento es un objeto similar a JSON (en realidad, BSON por debajo) que contiene tus datos. Puede incluir objetos y arrays anidados, lo que resulta mucho más natural para las apps modernas. Hablaremos más de BSON en el siguiente apartado.
Para entender mejor la arquitectura de MongoDB, pongamos un ejemplo. Imagina que construimos una app de e-commerce sencilla con MongoDB. Nuestros datos podrían organizarse así:
- Una base de datos llamada shopDB.
- Dentro, una colección llamada products.
- Y dentro de esa colección, documentos que representan cada producto con detalles como nombre, precio y categoría.
El esquema flexible
Para entender mejor el concepto de esquema flexible, piensa en el ejemplo anterior: un producto puede tener un campo de descuento y otro no. MongoDB no obliga a que todos los productos tengan exactamente los mismos campos. Esta flexibilidad es una de las razones por las que a los desarrolladores les encanta MongoDB, especialmente al crear aplicaciones que evolucionan rápido.
BSON y tipos de datos
Si has trabajado con JSON, MongoDB te resultará muy natural. En realidad, MongoDB no guarda los datos como JSON plano. Utiliza lo que se conoce como BSON. BSON significa Binary JSON.
¿Qué es BSON y por qué lo usa MongoDB?
BSON es como el primo más listo y eficiente de JSON. Mantiene la estructura legible de pares clave-valor que tanto gusta, pero añade superpoderes:
- Admite más tipos de datos que JSON (como fechas, decimales o binarios en bruto).
- Está optimizado para codificar y decodificar rápido, lo que acelera las consultas en MongoDB.
- Almacena todo en un formato binario compacto, más eficiente con grandes volúmenes de datos.
Básicamente, BSON le da a MongoDB la flexibilidad de JSON más el rendimiento y la precisión que una base de datos necesita.
Tipos de datos BSON más comunes
MongoDB admite una amplia gama de tipos de datos, pero estos son los más habituales con sus ejemplos:
- String:
"name": "Alice" - Number:
"age": 28 - Boolean:
"isActive": true - Date:
"createdAt": ISODate("2025-08-18T10:00:00Z") - Array:
"skills": ["MongoDB", "Node.js", "React"] - Documento embebido. Objetos anidados dentro de documentos:
"address": {
"city": "Lagos",
"country": "Nigeria"
}
- ObjectId: tipo especial de ID que usa MongoDB para identificadores únicos de documentos.
ObjectId("64f5c9e8a5f76b1d2c3a4567")
Veamos un ejemplo de documento de perfil de usuario en formato BSON almacenado en MongoDB:
{
"_id": ObjectId("64f5c9e8a5f76b1d2c3a4567"),
"name": "Moses",
"age": 30,
"isActive": true,
"skills": ["Laravel", "MongoDB", "Vue"],
"address": {
"city": "Abuja",
"country": "Nigeria"
},
"createdAt": ISODate("2025-08-18T10:00:00Z")
}
Algunos puntos a tener en cuenta:
- El campo
_idse genera automáticamente como unObjectIdsi no lo estableces tú. - Las fechas se almacenan como
ISODate, no como cadenas de texto sin más. - El documento anidado
addressy el arrayskillsmuestran la flexibilidad de MongoDB frente a las filas planas de SQL.
Principios de diseño de esquemas
MongoDB te permite evolucionar tu modelo de datos a medida que crece la aplicación porque tiene un esquema flexible. Sin embargo, sin un diseño de esquema adecuado, esa flexibilidad puede acabar en caos. Que MongoDB sea flexible no significa que debas renunciar a la estructura. Repasemos algunos principios de diseño de esquemas al trabajar con MongoDB.
Esquema flexible vs. sin esquema
A menudo se describe MongoDB como sin esquema, pero eso es algo engañoso. Cada documento sí tiene un esquema: simplemente no se hace cumplir a nivel de base de datos salvo que añadas reglas de validación.
Por ejemplo, dos documentos de la misma colección users podrían, técnicamente, verse muy distintos:
// Document 1
{ "name": "Alice", "email": "alice@example.com" }
// Document 2
{ "username": "Bob123", "age": 29 }
Esta flexibilidad viene muy bien al prototipar, pero en producción querrás cierta coherencia. Ahí entra la validación con JSON Schema. Puedes imponer reglas para no terminar con datos desordenados y poco fiables.
Embeber vs. referenciar documentos
Otra decisión clave en el diseño de esquemas en MongoDB es cómo modelar las relaciones. Veamos algunas formas de modelarlas en un documento MongoDB.
Embeber (anidar datos dentro de un documento)
MongoDB permite embeber documentos en una colección. Este enfoque es ideal para datos que se consultan juntos. Un ejemplo: una entrada de blog con sus comentarios guardados directamente dentro. El siguiente es un ejemplo de datos embebidos.
{
"title": "Intro to MongoDB",
"comments": [
{ "user": "Alice", "text": "Great post!" },
{ "user": "Bob", "text": "Very helpful." }
]
}
Estructurar los datos así mejora el rendimiento y reduce el número de consultas necesarias. Si no se diseña bien, puede acabar en documentos inflados.
Referenciar (enlazar entre documentos)
Cuando el tamaño de los datos relacionados crece o se reutilizan a menudo, conviene enlazar datos entre documentos. A esto se le llama referenciar.
Por ejemplo, en una entrada de blog con muchos comentarios, podemos guardar solo los IDs de los comentarios y que los comentarios vivan en su propia colección. El siguiente código ilustra este enfoque.
// Blog post
{ "title": "Intro to MongoDB", "commentIds": [ObjectId("..."), ObjectId("...")] }
// Separate comment document
{ "_id": ObjectId("..."), "user": "Alice", "text": "Great post!" }
Organizar los datos así mantiene los documentos pequeños, evita duplicidades y facilita el mantenimiento del código. Eso sí, requiere varias consultas (aunque puedes usar joins con $lookup en agregaciones).
Evitar errores comunes de diseño de esquema
Sobre-embeber: Dado que MongoDB es flexible, es tentador meterlo todo en un documento gigante. No es buena idea y puede perjudicar el rendimiento. MongoDB impone un tamaño máximo de 16 MB por documento para fomentar una estructura adecuada.
Ignorar los índices: No te olvides de los índices. Si tus consultas no encajan con tu diseño de esquema, tendrás búsquedas lentas. Diseña siempre pensando en los patrones de acceso.
Tratar MongoDB como si fuera SQL: Está bien dividir datos en documentos pequeños, pero recuerda que MongoDB ofrece un esquema flexible y no lo trates como una relacional. Si copias tu esquema relacional 1:1 a MongoDB (muchas tablas/colecciones pequeñas y normalizadas), pierdes las ventajas del modelado por documentos.
Tómate tiempo para planificar tus esquemas. Un buen diseño puede marcar una gran diferencia en el rendimiento de tu aplicación.
Validación de datos
MongoDB es flexible. Si no se tiene cuidado, esto puede derivar en datos desestructurados y desordenados. Aquí es donde entra la validación de datos.
Piensa en la validación como en fijar las reglas de juego de tus colecciones. Garantiza que cualquier documento insertado o actualizado cumpla ciertas normas, como exigir un campo de email o asegurar que “age” sea siempre un número.
Usar JSON Schema para validar en MongoDB
MongoDB admite JSON Schema para validación. Es un estándar para describir la forma de tus documentos. Puedes imponer reglas como:
- Campos obligatorios.
- Tipos de datos (string, number, date, etc.).
- Rangos de valores o patrones de cadena.
La validación nos da lo mejor de ambos mundos: la flexibilidad del esquema de MongoDB más barandillas que mantienen los datos limpios.
Imponer reglas para mantener los datos limpios
Imagina una colección de usuarios. Queremos asegurar que:
- Cada usuario tenga un nombre (string).
- Cada usuario tenga un email (string, con formato de email).
- Si existe age, debe ser un número mayor o igual que 18.
Así podríamos imponerlo con un validador de JSON Schema:
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+\\..+$",
description: "must be a valid email address"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer greater than or equal to 18"
}
}
}
}
})
MongoDB se asegura de que solo se guarden en la colección los datos que pasan la validación.
Operaciones CRUD
En el centro del trabajo con MongoDB están cuatro operaciones básicas: crear, leer, actualizar y eliminar, conocidas como CRUD.
Si dominas CRUD, puedes construir casi cualquier aplicación. MongoDB lo simplifica con unos pocos métodos intuitivos. Vamos uno por uno.
Create
Para añadir un documento nuevo a una colección en MongoDB, usas insertOne(). Por ejemplo, podemos crear un nuevo usuario en la colección user con el código siguiente.
db.users.insertOne({
name: "Alice",
email: "alice@example.com",
age: 25
})
MongoDB genera automáticamente un _id único para cada documento creado.
Read
Leer datos de una colección es directo. Usamos find(). Podemos obtener todos los documentos o filtrar con condiciones. El código siguiente recupera todos los usuarios de la colección.
// Find all users
db.users.find()
También podemos filtrar con una clave única—por ejemplo, el email.
// Find one user by email
db.users.find({ email: "alice@example.com" })
find() siempre devuelve un cursor (que puedes iterar). Si solo quieres una coincidencia, puedes usar findOne().
Update
Una vez creados los datos, a menudo hay que modificarlos. Para ello se usa updateOne(). Especificamos un filtro y los cambios a aplicar.
// Update Alice’s age
db.users.updateOne(
{ email: "alice@example.com" },
{ $set: { age: 26 } }
)
El operador $set actualiza solo el campo indicado y deja intacto el resto del documento.
Delete
Por último, podemos eliminar documentos con deleteOne() o deleteMany(). El ejemplo siguiente muestra una acción deleteOne.
// Delete Alice’s record
db.users.deleteOne({ email: "alice@example.com" })
Ten en cuenta que las eliminaciones son permanentes.
Con estas cuatro operaciones puedes construir desde un gestor de tareas hasta una plataforma de e-commerce.
Mejores prácticas de seguridad
La seguridad nunca debe ser un añadido de última hora cuando hablamos de bases de datos. Dicho esto, veamos las prácticas esenciales que toda persona principiante debería conocer.
Autenticación y autorización
De forma predeterminada, una instalación nueva de MongoDB puede no forzar la autenticación. Eso significa que cualquiera que se conecte podría acceder a tus datos. Es un riesgo enorme si no se atiende. Para no dejar tu MongoDB abierto, implementa autenticación y autorización.
- Autenticación: garantiza que solo usuarios válidos puedan conectarse.
- Autorización: garantiza que, incluso autenticados, solo puedan realizar las acciones permitidas.
Por ejemplo, en lugar de iniciar sesión como root/admin para todo, crea usuarios dedicados para tareas específicas.
// Create a new user with read-only access
db.createUser({
user: "reportViewer",
pwd: "strongPassword123",
roles: [ { role: "read", db: "salesDB" } ]
})
Este usuario solo puede leer datos de salesDB, no escribir ni borrar.
Control de acceso basado en roles (RBAC)
MongoDB utiliza roles para gestionar lo que puede hacer cada usuario. Algunos roles integrados son:
- Read: solo ver datos.
- ReadWrite: ver y modificar datos.
- DbAdmin: gestionar índices, estadísticas y profiling.
- Root: control total. Evita usarlo para el día a día.
Sigue el principio de mínimo privilegio: da a cada usuario solo lo necesario para su función y protegerás mejor tu base de datos.
Evita la exposición pública
Uno de los errores más comunes al empezar es dejar MongoDB escuchando en el puerto por defecto (27017) y enlazado a 0.0.0.0 (todas las interfaces).
Eso deja tu base de datos expuesta a todo Internet. Para evitarlo, aplica estas medidas:
- Vincula MongoDB solo a
localhosto a una IP privada/interna. - Usa un firewall (o un security group en la nube) para restringir el acceso.
- Conéctate siempre a través de VPN o un túnel SSH si necesitas acceso remoto.
# Example: /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1 # Only accessible locally
Con estas prácticas, tu despliegue de MongoDB estará mucho más protegido frente a filtraciones accidentales o ataques maliciosos.
Conclusión
MongoDB se ha ganado su lugar entre las bases de datos clave para aplicaciones modernas por su flexibilidad y su potencia. Ya sea para un side project o para un sistema a gran escala, dominar los fundamentos te ahorrará mucho tiempo y te hará más productivo. En este artículo, hemos visto siete conceptos clave que toda persona principiante debería conocer al trabajar con MongoDB:
- Qué es NoSQL y las bases de datos de documentos.
- Conceptos básicos de la arquitectura de MongoDB.
- BSON y tipos de datos.
- Principios de diseño de esquemas.
- Validación de datos.
- Operaciones CRUD.
- Mejores prácticas de seguridad.
Comprender bien estos conceptos te dará una base sólida para trabajar con MongoDB. Si quieres profundizar, consulta la documentación de MongoDB y el curso de DataCamp Introduction to MongoDB in Python.
FAQs
¿Cuál es la diferencia entre bases de datos NoSQL y SQL?
Las bases de datos NoSQL como MongoDB almacenan datos en formatos flexibles orientados a documentos, mientras que las SQL usan tablas estructuradas con esquemas fijos.
¿Cómo funciona la arquitectura de MongoDB?
MongoDB utiliza una arquitectura distribuida y escalable, con componentes como replica sets para alta disponibilidad y sharding para escalar horizontalmente.
¿Qué es BSON y por qué lo usa MongoDB?
BSON (Binary JSON) es el formato de datos de MongoDB, diseñado para almacenar con eficiencia documentos tipo JSON y admitir tipos de datos adicionales.
¿Por qué es importante el diseño de esquemas en MongoDB?
Aunque MongoDB sea flexible con el esquema, un diseño pensado garantiza consultas eficientes, menos redundancia y mejor rendimiento de la aplicación.
¿Cómo puedo asegurar mi base de datos MongoDB si estoy empezando?
Puedes activar la autenticación, usar control de acceso basado en roles, forzar conexiones TLS/SSL y actualizar MongoDB con regularidad para protegerte de vulnerabilidades.

Ingeniero de software
