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

5 modi per ottenere i secondi da una data in MongoDB

Questo articolo presenta 5 modi per restituire la parte dei secondi da un oggetto Date in MongoDB.

Dati di esempio

Supponiamo di avere una collezione chiamata cats con i seguenti documenti:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

Gli esempi seguenti mostrano varie opzioni per restituire la parte dei secondi da born campo di quei documenti.

Il $second Operatore

Il $second operatore è progettato specificamente per restituire un documento con la parte dei secondi di una data data.

Possiamo eseguire il codice seguente per restituire la parte dei secondi da born campo nel documento sopra.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthSecond: { $second: "$born" }
        }
    }
  ]
)

Risultato:

{ "birthSecond" : 15 }
{ "birthSecond" : 20 }
{ "birthSecond" : 1 }

Puoi anche specificare il fuso orario quando usi il $second operatore.

Vedi MongoDB $second per ulteriori informazioni ed esempi.

Il $dateToString Operatore

Il $dateToString operatore converte un oggetto data in una stringa in base a un formato specificato dall'utente. L'utente può quindi specificare che venga restituita solo la parte dei secondi, se richiesta.

Sono disponibili identificatori di formato per ciascuna parte della data. Il %S l'identificatore di formato restituisce la seconda parte (2 cifre, zero imbottito).

Esempio:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthSecond: { $dateToString: { format: "%S", date: "$born" } }
       }
     }
   ]
)

Risultato:

{ "birthSecond" : "15" }
{ "birthSecond" : "20" }
{ "birthSecond" : "01" }

Vedi MongoDB $dateToString per ulteriori informazioni ed esempi.

Il $dateToParts Operatore

Il $dateToParts l'operatore restituisce un documento che contiene le parti costitutive di un dato valore BSON Date come singole proprietà. Le proprietà restituite sono year , month , day , hour , minute , second e millisecond .

Potremmo quindi utilizzare $dateToParts in una fase della pipeline, quindi aggiungi un'altra fase della pipeline che estrae il second parte.

Ecco cosa $dateToParts resi per i nostri tre documenti:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Risultato:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 20,
		"millisecond" : 112
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 1,
		"millisecond" : 7
	}
}

Questo risultato può quindi essere passato alla fase successiva della pipeline, e quindi possiamo estrarre solo il second campo nella fase successiva.

Ecco cosa succede se aggiungiamo un'altra proiezione solo per il second campo:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthSecond: "$dateParts.second"
        }
    }
  ]
)

Risultato:

{ "birthSecond" : 15 }
{ "birthSecond" : 20 }
{ "birthSecond" : 1 }

Quindi, ogni volta che usi $dateToParts nella tua pipeline, avrai accesso al second campo (e le altre parti della data) nella fase successiva.

Vedi MongoDB $dateToParts per ulteriori informazioni ed esempi.

Il forEach() Metodo

Puoi usare cursor.forEach() per scorrere il cursore, utilizzando un metodo JavaScript come getSeconds() o getUTCSeconds() per restituire solo i secondi.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getUTCSeconds()
      );
  }
);

Risultato:

15
20
1

Il getUTCSeconds() Il metodo JavaScript restituisce un numero intero, compreso tra 0 e 59, che rappresenta i secondi nella data specificata in base all'ora universale.

Il getSeconds() il metodo lo restituisce nell'ora locale.

Potresti anche notare che le opzioni precedenti restituiscono un intero documento che contiene una coppia nome/valore, mentre questa opzione restituisce solo il valore effettivo dei secondi e non l'intero documento.

La map() Metodo

Il cursor.map() applica una funzione a ogni documento visitato dal cursore e combina i valori in un array.

Esempio:

db.cats.find().map(
  function(c) {
    c = c.born.getUTCSeconds();
    return c;
  }
);

Risultato:

[ 15, 20, 1 ]