Мне нужно получить среднее ежедневное, еженедельное и ежемесячное среднее количество записей в коллекции за определенный промежуток времени.Вот запрос, который я использую до сих пор.
db.collection.aggregate([
{
$match: {
"date":{
$gte:ISODate('2017-01-01T00:00:00.000Z'),
$lte:ISODate('2017-12-31T23:59:59.000Z')
}
}
},
{
$project : {
"_id":0,
"day": { $dayOfYear: "$date" }, //returns number between 1 and 366
"week": { $week: "$date" }, //number between 0 and 53
"month": { $month: "$date" } //number between 1 and 12
}
},
{
$group : {
"_id":"$month", //change this to $day or $week when needed
"total":{$sum : 1}
}
},
{
$group : {
"_id":null,
"total":{$avg : "$total"}
}
}
])
Тогда я получаю что-то вроде этого:
{
"_id" : null,
"total" : 4793758.66666666667
}
Это работает, но мне может понадобиться изменить первый $ group _id на $ day или $ week, чтобы получитьРезультаты.Так что я на самом деле выполнить этот запрос три раза, чтобы создать один отчет.
Можно ли получить среднесуточное, еженедельное и среднемесячное значение за один запрос?