MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agrupar por dia/mês/semana no intervalo de datas


Para agrupar semanalmente, execute o seguinte pipeline que usa principalmente o Operadores de agregação de data para extrair as partes da data:
db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtWeek",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" }
         }
    }
])

e para agregados mensais, troque o $group key para usar o campo do mês criado:
db.collection.aggregate([
    { 
        "$project": {
            "createdAtWeek": { "$week": "$createdAt" },
            "createdAtMonth": { "$month": "$createdAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$createdAtMonth",
             "average": { "$avg": "$rating" },
             "week": { "$first": "$createdAtWeek" }
         }
    }
])