AIdeaText commited on
Commit
9bab4e3
·
verified ·
1 Parent(s): 4d2b77b

Update modules/database/semantic_mongo_db.py

Browse files
Files changed (1) hide show
  1. modules/database/semantic_mongo_db.py +36 -16
modules/database/semantic_mongo_db.py CHANGED
@@ -97,9 +97,10 @@ def store_student_semantic_result(username, text, analysis_result, lang_code='en
97
  return False
98
 
99
  ####################################################################################
100
- def get_student_semantic_analysis(username, limit=100):
101
  """
102
  Recupera los análisis semánticos de un estudiante.
 
103
  """
104
  try:
105
  collection = get_collection(COLLECTION_NAME)
@@ -107,34 +108,53 @@ def get_student_semantic_analysis(username, limit=100):
107
  logger.error("No se pudo obtener la colección semantic")
108
  return []
109
 
110
- # Estandarizado: Buscamos todo lo del usuario que tenga un grafo
111
  query = {
112
  "username": username,
113
  "concept_graph": {"$exists": True, "$ne": None}
114
  }
115
 
116
- # Recuperamos y ordenamos por fecha (2026 aparecerá primero, luego 2025)
117
- analyses = list(collection.find(query).sort("timestamp", -1).limit(limit))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
- # Versión alternativa sin projection
120
- cursor = collection.find(query, {
121
- "timestamp": 1,
122
- "text": 1,
123
- "key_concepts": 1,
124
- "concept_graph": 1,
125
- "analysis_type": 1,
126
- "_id": 1
127
- }).sort("timestamp", -1).limit(limit)
 
 
 
 
 
 
128
 
129
- results = list(cursor)
130
  logger.info(f"Recuperados {len(results)} análisis para {username}")
131
  return results
132
 
133
  except PyMongoError as e:
134
- logger.error(f"Error de MongoDB: {str(e)}")
135
  return []
136
  except Exception as e:
137
- logger.error(f"Error inesperado: {str(e)}")
138
  return []
139
  ####################################################################################################
140
 
 
97
  return False
98
 
99
  ####################################################################################
100
+ def get_student_semantic_analysis(username, limit=10):
101
  """
102
  Recupera los análisis semánticos de un estudiante.
103
+ Ordena correctamente resolviendo discrepancias de formato de fecha.
104
  """
105
  try:
106
  collection = get_collection(COLLECTION_NAME)
 
108
  logger.error("No se pudo obtener la colección semantic")
109
  return []
110
 
 
111
  query = {
112
  "username": username,
113
  "concept_graph": {"$exists": True, "$ne": None}
114
  }
115
 
116
+ # Pipeline de agregación para unificar el tipo de dato antes de ordenar
117
+ pipeline = [
118
+ {"$match": query},
119
+ {"$addFields": {
120
+ "normalized_date": {
121
+ "$convert": {
122
+ "input": "$timestamp",
123
+ "to": "date",
124
+ "onError": None, # Si hay un formato inválido, no rompe la consulta
125
+ "onNull": None
126
+ }
127
+ }
128
+ }},
129
+ # Ordenamos usando la fecha ya normalizada
130
+ {"$sort": {"normalized_date": -1}}
131
+ ]
132
 
133
+ # Aplicamos el límite solo si se especifica (útil para get_student_semantic_data)
134
+ if limit is not None:
135
+ pipeline.append({"$limit": limit})
136
+
137
+ # Proyectamos solo los campos necesarios
138
+ pipeline.append({
139
+ "$project": {
140
+ "timestamp": 1,
141
+ "text": 1,
142
+ "key_concepts": 1,
143
+ "concept_graph": 1,
144
+ "analysis_type": 1,
145
+ "_id": 1
146
+ }
147
+ })
148
 
149
+ results = list(collection.aggregate(pipeline))
150
  logger.info(f"Recuperados {len(results)} análisis para {username}")
151
  return results
152
 
153
  except PyMongoError as e:
154
+ logger.error(f"Error de MongoDB en la agregación: {str(e)}")
155
  return []
156
  except Exception as e:
157
+ logger.error(f"Error inesperado al recuperar análisis: {str(e)}")
158
  return []
159
  ####################################################################################################
160