diff --git a/web/backend/services/mongodb.js b/web/backend/services/mongodb.js index 4f26469..7f09ea2 100644 --- a/web/backend/services/mongodb.js +++ b/web/backend/services/mongodb.js @@ -97,7 +97,9 @@ async function createIndexes() { await db.collection('articles').createIndex({ 'user_info.username': 1 }); await db.collection('articles').createIndex({ 'user_info.worker_name': 1 }); await db.collection('articles').createIndex({ 'user_info.is_favorite': 1 }); - await db.collection('articles').createIndex({ 'user_info.notified_at': -1 }); + // Índices para ordenamiento (NO usar user_info.notified_at porque es un array) + await db.collection('articles').createIndex({ createdAt: -1 }); + await db.collection('articles').createIndex({ modified_at: -1 }); await db.collection('articles').createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 }); // Índices de compatibilidad con estructura antigua await db.collection('articles').createIndex({ username: 1 }); @@ -250,9 +252,11 @@ export async function getNotifiedArticles(filter = {}) { query['user_info.worker_name'] = filter.worker_name; } + // Ordenar SOLO por campos a nivel de artículo, NO por user_info.notified_at + // porque user_info es un array y puede causar orden incorrecto const articles = await articlesCollection .find(query) - .sort({ 'user_info.notified_at': -1, createdAt: -1 }) + .sort({ createdAt: -1, modified_at: -1 }) .toArray(); // Filtrar y transformar artículos según el usuario solicitado