La query che stai descrivendo raggruppa una serie di documenti per giorno, quando tali documenti contengono data e ora UTC.
MongoDB memorizza internamente date/ora come numero di millisecondi dal 1 gennaio 1970, quindi il primo passaggio dovrà calcolare l'inizio della giornata per ciascun documento, quindi raggruppare in base a quel valore di inizio giornata.
Se stai usando MongoDB 5.0 puoi usare $dateTrunc operatore:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Per le versioni precedenti, puoi calcolare l'oggetto data che rappresenta l'inizio della giornata o creare una stringa contenente solo la data.
Per l'opzione stringa:
{$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" }}},
]}
Quindi, nel complesso, la pipeline di aggregazione sarebbe:
- $match per selezionare i documenti nell'intervallo di tempo desiderato
- $progetto per calcolare l'inizio della giornata per ogni documento
- $raggruppa entro l'inizio della giornata, contando il numero di occorrenze
- ulteriori fasi per convertire il documento nel formato desiderato