Заявката, която описвате, е групиране на поредица от документи по ден, когато тези документи съдържат UTC дата и час.
MongoDB съхранява вътрешно дати/часове като брой милисекунди от 1 януари 1970 г., така че първата стъпка ще трябва да бъде изчисляване на началото на деня за всеки документ, след което да се групира по тази стойност на началото на деня.
Ако използвате MongoDB 5.0, можете да използвате $dateTrunc оператор:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
За по-стари версии можете или да изчислите обекта за дата, който представлява началото на деня, или да създадете низ, съдържащ само датата.
За опцията за низ:
{$concat: [
{$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}
Така че като цяло тръбопроводът за агрегиране би бил:
- $match за избор на документи в желаната времева рамка
- $project за изчисляване на началото на деня за всеки документ
- $group до началото на деня, отчитайки броя на повторенията
- по-нататъшни етапи за конвертиране на документа в желания формат