Frågan du beskriver är att gruppera en serie dokument efter dag, när dessa dokument innehåller UTC datum och tid.
MongoDB lagrar internt datum/tider som antalet millisekunder sedan 1 januari 1970, så det första steget måste vara att beräkna början på dagen för varje dokument och sedan gruppera efter detta startvärde.
Om du använder MongoDB 5.0 kan du använda $dateTrunc operatör:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
För äldre versioner kan du antingen beräkna datumobjektet som representerar dagens början eller bygga en sträng som bara innehåller datumet.
För strängalternativet:
{$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" }}},
]}
Så totalt sett skulle aggregeringspipelinen vara:
- $match för att välja dokument inom önskad tidsram
- $project för att beräkna början på dagen för varje dokument
- $group vid början av dagen, räknar antalet förekomster
- ytterligare steg för att konvertera dokumentet till önskat format