Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/tutosrive/db-nosql-2026-1/llms.txt

Use this file to discover all available pages before exploring further.

MongoDB es un sistema gestor de bases de datos orientado a documentos y de código abierto que pertenece a la familia NoSQL. En lugar de almacenar información en tablas y filas como lo hace un sistema relacional tradicional, MongoDB organiza los datos en colecciones de documentos con formato similar a JSON. Esto le permite almacenar estructuras de datos complejas y heterogéneas de forma natural, escalar horizontalmente con facilidad y adaptarse a esquemas que evolucionan con el tiempo — características especialmente útiles en aplicaciones modernas de alto volumen.

Conceptos Clave

Antes de escribir una sola línea de código, conviene mapear la terminología de los sistemas relacionales (SQL) al mundo MongoDB. Aunque los conceptos no son perfectamente equivalentes, la siguiente tabla sirve como punto de partida:
SQLMongoDBDescripción
DatabaseDatabaseContenedor de nivel superior para los datos
TableCollectionAgrupación de documentos relacionados
RowDocumentUnidad básica de almacenamiento (formato BSON)
ColumnFieldClave dentro de un documento
Primary Key_idIdentificador único por documento
JOINDocumento embebido / $lookupEstrategia de relación entre entidades
Schema fijoEsquema flexibleMongoDB no exige la misma estructura en cada documento
La ausencia de un esquema rígido es una de las principales ventajas de MongoDB frente a los RDBMS, pero también requiere mayor disciplina en el diseño del modelo de datos.

Documentos BSON

Internamente, MongoDB almacena los datos en formato BSON (Binary JSON), una representación binaria de JSON que añade tipos de datos adicionales como Date, ObjectId, Decimal128, expresiones regulares y binarios arbitrarios. Para el desarrollador, los documentos lucen y se manipulan exactamente como objetos JSON.

Tipos de datos comunes en BSON

Tipo BSONEjemplo en mongosh
String"Manizales"
Integer (int32)3
Double4.5
Booleantrue
Datenew Date("1990-05-15")
ObjectIdObjectId("507f1f77bcf86cd799439011")
Array["catar", "bailar"]
Object (subdocumento){ city: "Manizales", state: "Caldas" }
Nullnull

Ejemplo de documento

El siguiente documento es representativo del esquema utilizado en los ejercicios del curso (colección personas, importada desde la API de datos aleatorios):
{
  "_id": { "$oid": "507f1f77bcf86cd799439011" },
  "gender": "female",
  "name": {
    "first": "Paula",
    "last": "Rojas"
  },
  "location": {
    "city": "Manizales",
    "state": "Caldas"
  },
  "email": "paula.rojas@example.com",
  "dob": {
    "date": "1995-03-12T00:00:00Z",
    "age": 29
  },
  "nat": "CO"
}
Obsérvese que el campo name y el campo location son a su vez subdocumentos (documentos anidados), y que dob también contiene un objeto con dos campos. Esta capacidad de anidar estructuras de forma natural elimina la necesidad de múltiples tablas o JOINs para representar entidades compuestas.

Bases de Datos y Colecciones

Listar y seleccionar bases de datos

En mongosh (MongoDB Shell), los comandos fundamentales de navegación son:
// Ver todas las bases de datos existentes
show dbs

// Crear o seleccionar una base de datos
// (se crea físicamente cuando se inserta el primer documento)
use mydb

// Ver la base de datos activa
db

// Listar las colecciones de la base de datos activa
show collections
En MongoDB, una base de datos no se persiste en disco hasta que contiene al menos un documento. El comando use mydb simplemente declara el contexto de trabajo actual.

Crear una colección

Las colecciones se crean automáticamente al insertar el primer documento, pero también pueden crearse explícitamente para configurar opciones como validación o tamaño máximo:
// Creación implícita (recomendada para empezar)
db.usuarios.insertOne({ nombre: "Paula Rojas" })

// Creación explícita
db.createCollection("usuarios")

// Creación con opciones avanzadas (tamaño fijo - capped collection)
db.createCollection("logs", {
  capped: true,
  size: 5242880, // 5 MB
  max: 1000      // máximo 1000 documentos
})

Eliminar colecciones y bases de datos

// Eliminar una colección y todos sus documentos
db.usuarios.drop()

// Eliminar la base de datos activa completa
db.dropDatabase()

ObjectId

Cada documento en MongoDB posee un campo _id que actúa como clave primaria. Si no se especifica al insertar, MongoDB genera automáticamente un valor de tipo ObjectId. Un ObjectId es un valor de 12 bytes codificado en hexadecimal (24 caracteres) con la siguiente estructura:
507f 1f77 bcf8 6cd7 9943 9011
│──────────│ │────│ │──────────│
  4 bytes     3 bytes   5 bytes
  Unix time   Machine   Process+Counter
SegmentoTamañoContenido
Timestamp4 bytesSegundos desde epoch Unix (permite extraer la fecha de creación)
Machine ID3 bytesIdentificador único del equipo
Process ID2 bytesPID del proceso que generó el documento
Counter3 bytesContador incremental para evitar colisiones

Acceder al _id en mongosh

// Obtener el _id del primer documento
db.usuarios.findOne({})._id

// Extraer la fecha de creación desde el ObjectId
db.usuarios.findOne({})._id.getTimestamp()

// Buscar un documento por su _id
db.usuarios.findOne({ _id: ObjectId("507f1f77bcf86cd799439011") })
Puedes usar cualquier tipo de dato como _id (string, número, UUID, etc.), siempre que sea único dentro de la colección. El uso de ObjectId es la convención estándar y la más eficiente en términos de índices.

Esquema Flexible

A diferencia de las bases de datos relacionales, MongoDB no exige que todos los documentos de una colección tengan la misma estructura. Dos documentos en la misma colección pueden tener campos completamente distintos:
// Ambos documentos coexisten en la misma colección sin errores
db.personas.insertMany([
  { nombre: "Ana López", edad: 22, programa: "Derecho" },
  { nombre: "Carlos Ríos", correo: "crios@uni.edu", semestre: 5 }
])
Esta flexibilidad acelera el desarrollo inicial y facilita la evolución del esquema a lo largo del tiempo. Sin embargo, en entornos de producción es común añadir validación para garantizar la integridad de los datos.
MongoDB permite definir reglas de validación mediante JSON Schema directamente en la colección usando db.createCollection() con la opción validator. Esto es especialmente útil en la P2 del curso (entrega individual) cuando se requiere mayor rigor en el modelo de datos.
db.createCollection("usuarios", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["nombre", "correo", "semestre"],
      properties: {
        nombre:   { bsonType: "string", description: "Nombre completo del estudiante" },
        correo:   { bsonType: "string", pattern: "^.+@uni\\.edu$" },
        semestre: { bsonType: "int",    minimum: 1, maximum: 10 }
      }
    }
  }
})

Build docs developers (and LLMs) love