Este taller aborda el diseño de un modelo de datos NoSQL para un sistema de fútbol universitario. Usando MongoDB como motor de base de datos, modelamos cuatro colecciones interrelacionadas —equipos, partidos, usuarios y predicciones— que permiten gestionar torneos internos de la universidad, registrar a los estudiantes participantes y almacenar sus predicciones de resultados en tiempo real.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.
Objetivo
Diseñar e implementar un modelo de datos NoSQL en MongoDB para un sistema de fútbol universitario que permita:- Registrar equipos con sus jugadores, estadísticas y entrenador.
- Gestionar partidos (matches) entre equipos dentro de diferentes torneos universitarios.
- Almacenar perfiles de usuarios (estudiantes) con su programa, semestre y tipo de plan.
- Registrar predicciones de resultado realizadas por los usuarios antes de cada partido.
Colecciones del Sistema
El sistema está compuesto por cuatro colecciones principales en la base de datosdbfutbol.
usuarios
Estudiantes registrados en la plataforma con su información académica y plan de suscripción.
partidos
Encuentros entre equipos universitarios, organizados por torneo, sede y fecha.
predicciones
Pronósticos de resultado realizados por usuarios antes de cada partido.
equipos
Equipos universitarios con plantilla de jugadores, estadísticas individuales y entrenador.
1. Colección usuarios
Almacena los perfiles de estudiantes registrados en la plataforma. Cada usuario tiene un identificador único, su información académica y un tipo de plan (free o premium) que determina las funcionalidades disponibles.
Campos:
| Campo | Tipo | Descripción |
|---|---|---|
user_id | Number | Identificador único del usuario |
nombre | String | Nombre completo |
alias | String | Nombre de usuario en la plataforma |
correo | String | Correo institucional |
programa | String | Programa académico en la universidad |
semestre | Number | Semestre actual del estudiante |
plan | String | Tipo de suscripción: "free" o "premium" |
puntos_acumulados | Number | Puntos obtenidos por predicciones acertadas |
2. Colección partidos
Registra cada encuentro futbolístico del sistema universitario. Incluye el torneo al que pertenece, los equipos local y visitante, la sede, el estado del partido y el resultado (cuando está disponible).
Campos:
| Campo | Tipo | Descripción |
|---|---|---|
match_id | Number | Identificador único del partido |
torneo | String | Nombre del torneo: "Liga Uni", "Interfacultades", "Copa Uni" |
fecha | String | Fecha y hora del partido (formato ISO 8601) |
local | String | Nombre del equipo local |
visitante | String | Nombre del equipo visitante |
estado | String | Estado del partido: "programado", "en juego", "finalizado" |
sede | String | Lugar donde se juega: "Estadio Central", "Campus Norte", "Campus Sur" |
resultado | Object/null | Resultado final (null si no ha comenzado) |
Los tres torneos universitarios del sistema son Liga Uni, Interfacultades y Copa Uni. Cada torneo agrupa partidos entre equipos de distintas facultades o categorías de competencia.
3. Colección predicciones
Almacena los pronósticos de resultado que cada usuario registra antes de un partido. Usa el patrón de documento embebido resumido (user_summary, match_summary) para evitar joins costosos en las consultas más frecuentes, manteniendo referencias por user_id y match_id para operaciones completas.
Campos:
| Campo | Tipo | Descripción |
|---|---|---|
prediction_id | Number | Identificador único de la predicción |
user_id | Number | Referencia al usuario que realizó la predicción |
match_id | Number | Referencia al partido predicho |
pred | Object | Predicción: { goles_local, goles_visitante } |
fecha | String | Fecha y hora en que se registró la predicción |
estado | String | Estado: "activa", "evaluada", "cancelada" |
user_summary | Object | Resumen embebido del usuario { alias } |
match_summary | Object | Resumen embebido del partido { local, visitante, torneo } |
puntos | Number/null | Puntos asignados al evaluar el resultado |
4. Colección equipos
Contiene los equipos participantes del sistema universitario. Cada documento embebe la plantilla completa de jugadores y las estadísticas individuales de cada uno, siguiendo el modelo de subdocumentos anidados propio de MongoDB.
Campos:
| Campo | Tipo | Descripción |
|---|---|---|
team_id | Number | Identificador único del equipo |
nombre | String | Nombre del equipo |
ciudad | String | Ciudad y país del equipo |
entrenador | Object | { nombre, experiencia_anios } |
jugadores | Array | Lista de jugadores con estadísticas |
jugadores tiene la siguiente estructura:
| Campo | Tipo | Descripción |
|---|---|---|
jugador_id | Number | Identificador del jugador |
nombre | String | Nombre completo |
posicion | String | Posición: Portero, Defensa, Centrocampista, Delantero |
dorsal | Number | Número de camiseta |
titular | String | "si" o "no" |
estadisticas | Object | Goles, asistencias, tarjetas, tipo de torneo |
Importar los Datos
Usamongoimport para cargar los archivos JSON en MongoDB. Asegúrate de tener MongoDB corriendo en tu máquina antes de ejecutar estos comandos.
Consultas Básicas sobre el Sistema
Una vez importados los datos, puedes explorar el sistema con las siguientes consultas enmongosh.
1. Listar todos los partidos programados
Muestra todos los partidos cuyo estado es"programado", ordenados por fecha ascendente.
2. Buscar usuarios con plan premium
Retorna todos los estudiantes suscritos al plan"premium", mostrando su nombre, alias, programa y semestre.
3. Buscar partidos por torneo
Filtra partidos que pertenecen a un torneo específico. Reemplaza el valor según el torneo que desees consultar:"Liga Uni", "Interfacultades" o "Copa Uni".
4. Buscar partidos por equipo (local o visitante)
Encuentra todos los partidos en los que participa un equipo determinado, ya sea como local o visitante. Usa el operador$or para cubrir ambos casos.
5. Contar usuarios por programa universitario
Usa el pipeline de agregación para agrupar usuarios por su programa académico y contar cuántos hay en cada uno, ordenados de mayor a menor.6. Ver las predicciones activas de un usuario
Consulta todas las predicciones activas de un usuario específico usando suuser_id.
7. Contar predicciones por torneo
Agrupa las predicciones por el nombre del torneo para ver cuál genera más actividad en la plataforma.Relaciones en el Modelo
El modelo utiliza una estrategia híbrida: referencias numéricas (user_id, match_id) para las relaciones principales y subdocumentos embebidos resumidos (user_summary, match_summary) en la colección de predicciones para optimizar las consultas más frecuentes.
- Lecturas rápidas:
user_summaryymatch_summarypermiten mostrar información del usuario y del partido en una predicción sin hacer múltiples consultas. - Actualizaciones controladas: Los datos maestros (nombre completo, estadísticas del partido) se actualizan en su colección original; el resumen embebido es solo para visualización.
- Consistencia referencial lógica: Aunque MongoDB no impone claves foráneas, la convención
user_id/match_idestablece la trazabilidad entre colecciones.
Para buscar predicciones con información completa del usuario y del partido, puedes usar el operador
$lookup en un pipeline de agregación para hacer un “join” entre las colecciones predicciones, usuarios y partidos.