2012-07-17 9 views
0

Je cherche à écrire une requête d'agrégation assez simple dans MongoDB, mais avec un certain problème.Requête d'agrégation dans MongoDB

Ce que je voudrais faire est de tirer la somme de tous les enregistrements au cours des 7 derniers jours regroupés par jour. Il est assez facile de définir la date en UTC il y a 7 jours, mais j'aimerais la faire par programmation, donc je n'ai pas besoin de déterminer la date UTC à chaque fois. Par exemple au lieu de 1341964800 je voudrais spécifier quelque chose comme date() - 7 jours.

est ici la fonction d'agrégation actuelle je qui travaille:

db.visits_calc.group(
    { key:{date:true}, 
    cond:{date:{$gt:1341964800}}, 
    reduce:function(obj,prev) {prev.csum += obj.total_imp}, 
    initial:{csum:0} 
}); 

Merci à l'avance!

Répondre

3

Vous pouvez effectuer une opération arithmétique sur l'horodatage en millisecondes renvoyé par Date.now() pour trouver l'horodatage approprié pour il y a 7 jours. Vous devez soustraire le nombre de millisecondes en 7 jours (1000ms/s, 60 s/min, 60min/h, 24 heures/jour, 7j/semaine).

var weekAgo = Date.now() - (1000*60*60*24*7); 
db.visits_calc.group(
    { key:{date:true}, 
    cond:{date:{$gt:weekAgo}}, 
    reduce:function(obj,prev) {prev.csum += obj.total_imp}, 
    initial:{csum:0} 
});