🚀 ¡Transforma tu idea en un proyecto exitoso!
Desarrollo moderno, creativo, eficiente y escalable.
Comunicación clara, entregas puntuales y soluciones que realmente funcionan.

¡Conversemos!

Fundamentos básicos de MongoDB

MongoDB es una base de datos NoSQL basada en documentos que utiliza un modelo de datos de tipo JSON, en lugar de filas y columnas tradicionales. Es una base de datos de código abierto, de uso sencillo y diseñada para el desarrollo de aplicaciones modernas y para la nube.

  Características principales

  • Orientada a documentos: Almacena datos en formato JSON/BSON
  • Escalable: Su arquitectura permite añadir más nodos para compartir la carga
  • Flexible: No requiere esquemas fijos como las bases de datos relacionales
  • Alta disponibilidad: Soporte para replicación y tolerancia a errores

BSON (Binary JSON)

MongoDB almacena los datos en documentos BSON, un formato que extiende JSON para incluir tipos de datos adicionales como fechas, enteros binarios y ObjectIds, proporcionando mayor eficiencia en almacenamiento y consulta.

Ejemplo de documento:

json
{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "name": "Urian",
  "edad": 30,
  "ciudad": "Bogotá",
  "fecha_registro": ISODate("2024-01-15T10:30:00Z"),
  "activo": true,
  "hobbies": ["programación", "música", "deportes"]
}

Conceptos Fundamentales

NoSQL vs SQL

NoSQL (MongoDB)SQL (MySQL, PostgreSQL)
Documentos JSON/BSONFilas y columnas
Esquema flexibleEsquema fijo
Escalabilidad horizontalEscalabilidad vertical
Consultas con JavaScriptConsultas con SQL

Documentos

Un documento es la unidad básica de datos en MongoDB, similar a una fila en una base de datos relacional, pero mucho más flexible. Cada documento puede tener una estructura diferente.

Ejemplo:

json
{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "nombre": "Juan Pérez",
  "email": "juan@email.com",
  "direccion": {
    "calle": "Carrera 15 #85-32",
    "ciudad": "Bogotá",
    "pais": "Colombia"
  }
}

Colecciones

Una colección es un grupo de documentos, similar a una tabla en una base de datos relacional. No requiere esquema fijo.

Ejemplo de colección “usuarios”:

json
// Documento 1
{
  "_id": ObjectId("507f1f77bcf86cd799439011"),
  "nombre": "Juan",
  "edad": 25
}

// Documento 2
{
  "_id": ObjectId("507f1f77bcf86cd799439012"),
  "nombre": "María",
  "email": "maria@email.com",
  "telefono": "3001234567"
}

Clave Principal (_id)

Cada documento tiene un campo _id único que actúa como clave principal. Si no se proporciona, MongoDB lo genera automáticamente como un ObjectId.

Índices

Los índices mejoran significativamente la velocidad de las consultas al crear estructuras de datos optimizadas para búsquedas rápidas.

Operaciones Básicas (CRUD)


Las operaciones CRUD (Create, Read, Update, Delete) son fundamentales en MongoDB. A diferencia de SQL, MongoDB utiliza métodos JavaScript para manipular documentos, ofreciendo mayor flexibilidad y una sintaxis más intuitiva para desarrolladores web.

1CREAR (Insert):

MongoDB ofrece dos métodos principales para insertar datos: insertOne() para un solo documento e insertMany() para múltiples documentos. Cada inserción genera automáticamente un _id único si no se especifica.

Insertar un documento


L**os métodos insertOne() y insertMany() son utilizados para insertar documentos en una colección. El método insertOne() inserta un solo documento, mientras que insertMany() inserta múltiples documentos en una sola operación.

javascript
// Insertar un documento simple
db.usuarios.insertOne({
  "nombre": "Juan Pérez",
  "email": "juan@email.com",
  "edad": 30,
  "ciudad": "Bogotá"
})

// Insertar múltiples documentos
db.usuarios.insertMany([
  {
    "nombre": "María García",
    "email": "maria@email.com",
    "edad": 25
  },
  {
    "nombre": "Carlos López",
    "email": "carlos@email.com",
    "edad": 35
  }
])

2. LEER (Find)

Leer documentos en MongoDB se refiere a la operación de recuperar datos almacenados en la base de datos. MongoDB ofrece varios métodos para realizar consultas y recuperar documentos.

Consultas básicas

javascript
// Buscar todos los documentos
db.usuarios.find()

// Buscar con filtro
db.usuarios.find({"ciudad": "Bogotá"})

// Buscar con múltiples condiciones
db.usuarios.find({
  "edad": {$gte: 25},
  "ciudad": "Bogotá"
})

// Buscar un solo documento
db.usuarios.findOne({"email": "juan@email.com"})

// Proyección (solo ciertos campos)
db.usuarios.find({}, {"nombre": 1, "email": 1, "_id": 0})

// Ordenar resultados
db.usuarios.find().sort({"edad": 1}) // 1 = ascendente, -1 = descendente

// Limitar resultados
db.usuarios.find().limit(5)

// Saltar documentos
db.usuarios.find().skip(10).limit(5)

Operadores de consulta


MongoDB ofrece operadores de consulta para realizar búsquedas más avanzadas. A continuación, se presentan algunos operadores comunes:

javascript
// Comparación
db.usuarios.find({"edad": {$gt: 25}})        // Mayor que
db.usuarios.find({"edad": {$gte: 25}})       // Mayor o igual que
db.usuarios.find({"edad": {$lt: 30}})        // Menor que
db.usuarios.find({"edad": {$lte: 30}})       // Menor o igual que
db.usuarios.find({"edad": {$ne: 25}})        // No igual a

// Lógica
db.usuarios.find({
  $or: [
    {"ciudad": "Bogotá"},
    {"ciudad": "Medellín"}
  ]
})

db.usuarios.find({
  $and: [
    {"edad": {$gte: 25}},
    {"ciudad": "Bogotá"}
  ]
})

// Arrays
db.usuarios.find({"hobbies": "programación"})  // Contiene elemento
db.usuarios.find({"hobbies": {$in: ["música", "deportes"]}})

// Texto
db.usuarios.find({"nombre": /Juan/})          // Expresión regular
db.usuarios.find({"nombre": {$regex: "Juan", $options: "i"}}) // Case insensitive

3. ACTUALIZAR (Update)

La actualización en MongoDB se refiere a la operación de modificar uno o más documentos existentes en una colección. MongoDB ofrece métodos para actualizar documentos individuales o múltiples documentos de manera masiva.

Actualizar documentos

javascript
// Actualizar un documento
db.usuarios.updateOne(
  {"email": "juan@email.com"},
  {$set: {"edad": 31, "ciudad": "Medellín"}}
)

// Actualizar múltiples documentos
db.usuarios.updateMany(
  {"ciudad": "Bogotá"},
  {$set: {"pais": "Colombia"}}
)

// Reemplazar documento completo
db.usuarios.replaceOne(
  {"email": "juan@email.com"},
  {
    "nombre": "Juan Carlos Pérez",
    "email": "juan@email.com",
    "edad": 31,
    "ciudad": "Medellín"
  }
)

// Incrementar valores
db.usuarios.updateOne(
  {"email": "juan@email.com"},
  {$inc: {"edad": 1}}
)

// Agregar a array
db.usuarios.updateOne(
  {"email": "juan@email.com"},
  {$push: {"hobbies": "lectura"}}
)

// Remover de array
db.usuarios.updateOne(
  {"email": "juan@email.com"},
  {$pull: {"hobbies": "música"}}
)

4. ELIMINAR (Delete)


La eliminación en MongoDB se refiere a la operación de eliminar uno o más documentos existentes en una colección. MongoDB ofrece métodos para eliminar documentos individuales o múltiples documentos de manera masiva.

Eliminar documentos

javascript
// Eliminar un documento
db.usuarios.deleteOne({"email": "juan@email.com"})

// Eliminar múltiples documentos
db.usuarios.deleteMany({"ciudad": "Bogotá"})

// Eliminar todos los documentos de una colección
db.usuarios.deleteMany({})

// Eliminar colección completa
db.usuarios.drop()

5. Operaciones Avanzadas


Agregación


La agregación en MongoDB se refiere a la operación de procesar y transformar datos en una colección mediante una secuencia de operaciones. MongoDB ofrece una poderosa funcionalidad de agregación mediante el uso de pipelines.

javascript
// Contar documentos
db.usuarios.countDocuments({"ciudad": "Bogotá"})

// Agrupación
db.usuarios.aggregate([
  {$group: {
    "_id": "$ciudad",
    "total": {$sum: 1},
    "promedio_edad": {$avg: "$edad"}
  }}
])

// Pipeline de agregación
db.usuarios.aggregate([
  {$match: {"edad": {$gte: 25}}},
  {$group: {
    "_id": "$ciudad",
    "usuarios": {$sum: 1}
  }},
  {$sort: {"usuarios": -1}}
])

Índices


Los índices en MongoDB se refieren a estructuras de datos que mejoran la velocidad de las consultas. Al crear un índice en una colección, MongoDB crea una tabla de búsqueda separada que contiene los valores del campo indexado y los punteros a los documentos originales.

javascript
// Crear índice simple
db.usuarios.createIndex({"email": 1})

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

// Crear índice de texto
db.usuarios.createIndex({"nombre": "text", "email": "text"})

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

// Eliminar índice
db.usuarios.dropIndex({"email": 1})
  Ventajas de MongoDB

Flexibilidad de Esquema

  • Sin esquema fijo: documentos con estructuras distintas
  • Ágil: cambios sin migraciones complejas
  • JSON nativo: integración natural con apps modernas

Alto Rendimiento

  • Índices: búsquedas rápidas
  • Consultas avanzadas: operadores y regex
  • Caché automático: acelera lecturas frecuentes

Ecosistema Rico

  • Drivers: Node.js, Python, Java, Go, PHP, C#
  • Herramientas: Compass, Atlas, mongosh
  • Integración: Express.js, Django, Spring Boot

Alta Disponibilidad

  • Replicación: copias en varios nodos
  • Tolerancia a fallos: servicio continuo
  • Backups: automáticos y recuperables

Escalabilidad

  • Sharding: distribuye datos en servidores
  • Balanceo: reparte carga de consultas
  • Crecimiento elástico: agrega nodos según demanda