Sí, eso es más o menos. Recupere todas las entidades que desea sumar y sumézcalas en su aplicación. No hay SUM
en GQL.
Si lo que estás tratando de lograr es encontrar la calificación promedio de una entidad, hay una mejor manera.
class RateableThing(db.Model):
num_ratings = db.IntegerProperty()
avg_rating = db.FloatProperty()
Encontrar calificación promedio de la cosa es una búsqueda simple, y la adición de una nueva calificación es simplemente:
thing.avg_ratings = ((thing.avg_ratings * thing.num_ratings) + new_rating)/thing.num_ratings + 1
thing.num_ratings += 1
thing.put()
El idioma predominante del almacén de datos de App Engine es hacer tanto trabajo como sea posible en escriba, y lo menos posible en lectura, ya que las lecturas ocurrirán con mucha más frecuencia.
¿Qué quieres decir en cada escritura para calcular la calificación y escribirla en cada escritura y no calcular en lectura? ¿Llamar a thing.num_ratings obtiene la suma total de las entidades? o debería simplemente subir los números en cada escritura? porque me mudé a las duplicaciones de almacenamiento de datos y guardo las claves para cada calificación para poder saber quién calificó qué y así sucesivamente. No quiero una entidad de suma que siga actualizando. ¿Es eso lo que quieres decir? – Alon
'num_ratings' es la cantidad de veces que se calificó la cosa. Por lo tanto, cada vez que agregue una calificación, incremente 'num_ratings'; si desea realizar un seguimiento de quién está calificado, puede conservar' ListProperty' de los usuarios. Si desea realizar un seguimiento de quién calificó, * y qué calificó *, un 'ListProperty' de' Clasificación' (usuario y puntaje) se opone. Pero aún así mantenga la calificación simple (num_ y avg_) para evitar el cálculo en cada lectura de la calificación de la cosa. Solo cuando desee inspeccionar los datos completos de calificación debería ingresar a la lista de calificaciones de los usuarios. –
por lo que siempre debo mantener una tabla de resumen para la calificación donde subí la calificación de cada calificación de usuario para el cálculo. muchas gracias :) – Alon