Opisywane zapytanie grupuje serię dokumentów według dnia, gdy dokumenty te zawierają datę i godzinę UTC.
MongoDB wewnętrznie przechowuje daty/czasy jako liczbę milisekund od 1 stycznia 1970 r., więc pierwszym krokiem będzie obliczenie początku dnia dla każdego dokumentu, a następnie pogrupowanie według tej wartości początku dnia.
Jeśli używasz MongoDB 5.0, możesz użyć $dateTrunc operator:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
W przypadku starszych wersji można albo obliczyć obiekt daty, który reprezentuje początek dnia, albo zbudować ciąg zawierający tylko datę.
Dla opcji ciągu:
{$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" }}},
]}
Ogólnie rzecz biorąc, potok agregacji będzie wyglądał następująco:
- $dopasuj, aby wybrać dokumenty w żądanym przedziale czasowym
- $projekt do obliczania początku dnia dla każdego dokumentu
- $grupuj według początku dnia, licząc liczbę wystąpień
- dalsze etapy konwersji dokumentu do pożądanego formatu