A consulta que você está descrevendo está agrupando uma série de documentos por dia, quando esses documentos contêm data e hora UTC.
O MongoDB armazena internamente datas/horas como o número de milissegundos desde 1º de janeiro de 1970, portanto, a primeira etapa precisará calcular o início do dia para cada documento e, em seguida, agrupar por esse valor de início do dia.
Se você estiver usando o MongoDB 5.0, poderá usar o $dateTrunc operador:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Para versões mais antigas, você pode calcular o objeto de data que representa o início do dia ou criar uma string contendo apenas a data.
Para a opção de string:
{$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" }}},
]}
Portanto, no geral, o pipeline de agregação seria:
- $match para selecionar documentos no prazo desejado
- $project para calcular o início do dia para cada documento
- $group pelo início do dia, contando o número de ocorrências
- etapas adicionais para converter o documento no formato desejado