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

Regrouper par jour/mois/semaine sur la plage de dates

Pour un regroupement sur une base hebdomadaire, exécutez le pipeline suivant qui utilise principalement le Opérateurs d'agrégation de dates pour extraire les parties de date :

db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtWeek",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" }
         }
    }
])

et pour les agrégats mensuels, échangez le $group clé pour utiliser le champ mois créé :

db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtMonth",
             "average": { "$avg": "$rating" },
             "week": { "$first": "$createdAtWeek" }
         }
    }
])