De query die u beschrijft, groepeert een reeks documenten per dag, wanneer die documenten UTC datetime bevatten.
MongoDB slaat intern datums/tijden op als het aantal milliseconden sinds 1 januari 1970, dus de eerste stap is het berekenen van het begin van de dag voor elk document en vervolgens groeperen op die beginwaarde.
Als u MongoDB 5.0 gebruikt, kunt u de $dateTrunc gebruiken operator:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Voor oudere versies kunt u het datumobject berekenen dat het begin van de dag vertegenwoordigt of een tekenreeks maken die alleen de datum bevat.
Voor de string-optie:
{$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" }}},
]}
Dus over het algemeen zou de aggregatiepijplijn zijn:
- $match om documenten in het gewenste tijdsbestek te selecteren
- $project om het begin van de dag voor elk document te berekenen
- $groepeer aan het begin van de dag, tel het aantal keren
- verdere stappen om het document naar het gewenste formaat te converteren