MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose:come ottenere le statistiche dei dati di caricamento degli ultimi 7 giorni da DB?

La query che stai descrivendo raggruppa una serie di documenti per giorno, quando tali documenti contengono data e ora UTC.

MongoDB memorizza internamente date/ora come numero di millisecondi dal 1 gennaio 1970, quindi il primo passaggio dovrà calcolare l'inizio della giornata per ciascun documento, quindi raggruppare in base a quel valore di inizio giornata.

Se stai usando MongoDB 5.0 puoi usare $dateTrunc operatore:

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

Per le versioni precedenti, puoi calcolare l'oggetto data che rappresenta l'inizio della giornata o creare una stringa contenente solo la data.

Per l'opzione stringa:

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

Quindi, nel complesso, la pipeline di aggregazione sarebbe:

  • $match per selezionare i documenti nell'intervallo di tempo desiderato
  • $progetto per calcolare l'inizio della giornata per ogni documento
  • $raggruppa entro l'inizio della giornata, contando il numero di occorrenze
  • ulteriori fasi per convertire il documento nel formato desiderato