Dotaz, který popisujete, seskupuje řadu dokumentů podle dne, pokud tyto dokumenty obsahují datum a čas UTC.
MongoDB interně ukládá data/časy jako počet milisekund od 1. ledna 1970, takže prvním krokem bude třeba vypočítat začátek dne pro každý dokument a poté seskupit podle této hodnoty začátku dne.
Pokud používáte MongoDB 5.0, můžete použít $dateTrunc operátor:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
U starších verzí můžete buď vypočítat objekt data, který představuje začátek dne, nebo vytvořit řetězec obsahující pouze datum.
Pro možnost řetězce:
{$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" }}},
]}
Celkově by tedy agregační kanál byl:
- $match pro výběr dokumentů v požadovaném časovém rámci
- $project pro výpočet začátku dne pro každý dokument
- $skupina na začátku dne, počítá se počet výskytů
- další fáze převodu dokumentu do požadovaného formátu