- docs/ → INFO/DOCS/CONTEXT/ (documentación técnica en markdown) - FLUJOS/DOCS/ + FLUJOS_DATOS/DOCS/ → INFO/DOCS/ (txts de arquitectura) - POCS/ → INFO/POCS/ (pruebas de concepto) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 KiB
MongoDB — Contexto técnico FLUJOS
Fecha: 2026-04-21
Instancia: mongodb://localhost:27017 (solo localhost, no expuesto)
Base de datos: FLUJOS_DATOS
Colecciones y esquema
wikipedia
Artículos scrapeados de la API de Wikipedia por temas.
{
"_id": ObjectId,
"archivo": "Nombre_del_articulo.txt", // UNIQUE INDEX — clave de dedup
"tema": "guerra global",
"subtema": "alianzas militares",
"texto": "Contenido completo del artículo...",
"fecha": ISODate | null
}
noticias
Artículos scrapeados de ~90 medios internacionales (ver scraper de noticias).
{
"_id": ObjectId,
"archivo": "titulo-noticia.txt", // UNIQUE INDEX
"tema": "guerra global",
"subtema": "conflictos internacionales",
"texto": "Texto limpio de la noticia...",
"fecha": ISODate | null
}
torrents
Documentos de WikiLeaks y otros torrents de documentos filtrados.
{
"_id": ObjectId,
"archivo": "documento.pdf.txt", // UNIQUE INDEX
"tema": "...",
"subtema": "...",
"texto": "...",
"fecha": ISODate | null
}
imagenes
Imágenes analizadas por Qwen3-VL-8B. Solo se crea un doc cuando el modelo ha generado descripción.
{
"_id": ObjectId,
"archivo": "cambio_climatico_003.jpg", // UNIQUE INDEX
"image_path": "/var/www/.../IMAGENES/output/wiki_images/cambio_climatico/cambio_climatico_003.jpg",
"tema": "cambio climático",
"subtema": "calentamiento global",
"texto": "descripción generada por Qwen3-VL...",
"keywords": ["glaciar", "deshielo", "ártico"],
"fecha": ISODate("2026-04-21")
}
imagenes_wiki
Imágenes scrapeadas de Wikipedia SIN análisis Qwen. Fallback cuando imagenes no tiene el doc.
{
"_id": ObjectId,
"archivo": "cambio_climatico_003.jpg", // UNIQUE INDEX
"image_path": "/var/www/.../output/wiki_images/cambio_climatico/cambio_climatico_003.jpg",
"image_url": "https://upload.wikimedia.org/...",
"tema": "cambio climático",
"subtema": "glaciares árticos",
"descripcion_wiki": "Descripción Wikimedia del fichero",
"articulo_titulo": "Calentamiento global",
"fecha": ISODate("2026-04-21")
}
comparaciones
Pares de documentos con su similitud calculada. ~52M documentos existentes.
{
"_id": ObjectId,
"noticia1": "Nombre_articulo_A.txt",
"noticia2": "Nombre_articulo_B.txt",
"porcentaje_similitud": 23.45 // float, % de palabras compartidas
}
IMPORTANTE: Esta colección NO tiene índice único porque los 52M docs existentes pueden tener duplicados. Las escrituras usan update_one(..., upsert=True) por (noticia1, noticia2).
pipeline_log
Estado de ejecución del pipeline maestro. Un doc por ejecución de fase.
{
"_id": ObjectId,
"fase": "scraping" | "analisis" | "comparacion",
"estado": "en_progreso" | "completado" | "error",
"inicio": ISODate,
"fin": ISODate | null,
"stats": {
"wikipedia_nuevos": 15,
"noticias_nuevos": 230,
"imagenes_wiki_nuevas": 60
}
}
Índices únicos
Creados automáticamente por pipeline_maestro.py::setup_indices():
wikipedia.archivo UNIQUE ASC
noticias.archivo UNIQUE ASC
imagenes.archivo UNIQUE ASC
imagenes_wiki.archivo UNIQUE ASC
El campo archivo es el nombre del fichero (ej: "Guerra_del_Golfo.txt"). Es la clave de deduplicación en todos los upserts.
Volumen aproximado (2026-04-21)
| Colección | Docs aprox. | Tamaño |
|---|---|---|
| wikipedia | ~5.000 | ~50 MB texto |
| noticias | ~20.000 | ~200 MB texto |
| torrents | ~500 | ~10 MB |
| imagenes | ~150 | 1 MB (solo metadatos) |
| imagenes_wiki | ~500 | 2 MB |
| comparaciones | ~52.000.000 | ~3.2 GB |
| pipeline_log | <100 | <1 MB |
Consultas frecuentes desde la API
Query de nodos (FLUJOS_APP.js línea 67–94)
// Filtro base
{ tema: "guerra global", subtema: "...", texto: { $regex: "...", $options: 'i' } }
// Con fechas
{ ..., fecha: { $gte: new Date("2024-01-01"), $lte: new Date("2024-12-31") } }
Query de enlaces (línea 147–155)
{
porcentaje_similitud: { $gte: 20.0 },
noticia1: { $in: [...nodeIds] },
noticia2: { $in: [...nodeIds] }
}
Conexión desde Node.js
// FLUJOS_APP.js
const mongoUrl = process.env.MONGO_URL || 'mongodb://localhost:27017';
const dbName = process.env.DB_NAME || 'FLUJOS_DATOS';
const client = new MongoClient(mongoUrl);
await client.connect();
const db = client.db(dbName);
Configuración en .env:
MONGO_URL=mongodb://localhost:27017
DB_NAME=FLUJOS_DATOS
Conexión desde Python
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017', serverSelectionTimeoutMS=5000)
db = client['FLUJOS_DATOS']
Temas definidos en el sistema
Los temas son etiquetas fijas asignadas durante el scraping/tokenización:
"guerra global" → subtemas: conflictos internacionales, guerras civiles, terrorismo, armas, alianzas militares
"inteligencia y seguridad"→ subtemas: inteligencia, ciberseguridad, espionaje, seguridad nacional, contraterrorismo
"cambio climático" → subtemas: cambio climático, desastres naturales, conservación, energía renovable, escasez de agua
"demografía y sociedad" → subtemas: sobrepoblación, enfermedades, migraciones, urbanización, despoblación rural
"economía y corporaciones"→ subtemas: economía global, corporaciones multinacionales, comercio internacional, organismos financieros, desigualdad económica
"otros" → documentos que no encajan en ningún tema
La asignación la hace pipeline_completo.py::asignar_tema_y_subtema() buscando palabras clave en el texto.
Ruta del dato físico
MongoDB FLUJOS_DATOS
└── imagenes_wiki / imagenes
└── image_path → /var/www/theflows.net/flujos/FLUJOS_DATOS/IMAGENES/output/wiki_images/{tema_slug}/{archivo}
servido como → https://theflows.net/wiki-images/{tema_slug}/{archivo}