MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

regrouper par jour/mois et prendre la moyenne de la note ce jour/mois en mongo

Pour regrouper les documents par jour/mois et renvoyer la clé du mois dans votre sortie, vous devez d'abord $project les champs clés aux formats appropriés en utilisant la Date opérateurs, en particulier les $dateToString et $month les opérateurs.

Cela peut être fait dans un $project étape avant le $group étape mais pas nécessaire puisque le $group pipeline accueille principalement l'accumulateur opérateurs.

Dans le précédent $group pipeline, vous pouvez regrouper les documents par la clé de date formatée, agréger à l'aide de $avg et renvoyez le mois sous forme d'entier du pipeline précédent en utilisant $first opérateur d'accumulateur.

L'exécution du pipeline d'agrégation suivant devrait vous donner le résultat souhaité :

db.collection.aggregate([
  { "$group": {
    "_id": { 
        "$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" } 
    },
    "average": { "$avg": "$rating" },
    "month": { "$first": { "$month": "$ceatedAt" } },
  } }
])