sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose:¿Cómo obtener las estadísticas de datos de carga de los últimos 7 días desde la base de datos?

La consulta que está describiendo agrupa una serie de documentos por día, cuando esos documentos contienen fecha y hora UTC.

MongoDB almacena internamente fechas/horas como la cantidad de milisegundos desde el 1 de enero de 1970, por lo que el primer paso deberá ser calcular el inicio del día para cada documento, luego agrupar por ese valor de inicio del día.

Si usa MongoDB 5.0, puede usar $dateTrunc operador:

{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}

Para versiones anteriores, puede calcular el objeto de fecha que representa el inicio del día o crear una cadena que contenga solo la fecha.

Para la opción de cadena:

{$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" }}},
]}

Entonces, en general, la canalización de agregación sería:

  • $match para seleccionar documentos en el período de tiempo deseado
  • $proyecto para calcular el inicio del día para cada documento
  • $grupo por el inicio del día, contando el número de ocurrencias
  • más etapas para convertir el documento al formato deseado