Die Abfrage, die Sie beschreiben, gruppiert eine Reihe von Dokumenten nach Tag, wenn diese Dokumente UTC-Datum/Uhrzeit enthalten.
MongoDB speichert intern Daten/Zeiten als Anzahl von Millisekunden seit dem 1. Januar 1970, daher muss der erste Schritt darin bestehen, den Tagesanfang für jedes Dokument zu berechnen und dann nach diesem Tagesanfangswert zu gruppieren.
Wenn Sie MongoDB 5.0 verwenden, können Sie $dateTrunc verwenden Betreiber:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Bei älteren Versionen können Sie entweder das Datumsobjekt berechnen, das den Tagesbeginn darstellt, oder einen String erstellen, der nur das Datum enthält.
Für die String-Option:
{$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" }}},
]}
Insgesamt wäre die Aggregationspipeline also:
- $match, um Dokumente im gewünschten Zeitraum auszuwählen
- $project zur Berechnung des Tagesbeginns für jedes Dokument
- $group nach Tagesbeginn, wobei die Anzahl der Vorkommen gezählt wird
- weitere Schritte, um das Dokument in das gewünschte Format zu konvertieren