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

5 modi per ottenere i millisecondi da una data in MongoDB

Questo articolo presenta 5 modi per restituire la porzione di millisecondi 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 porzione di millisecondi da born campo di quei documenti.

Il $millisecond Operatore

Il $millisecond operatore è progettato specificamente per restituire un documento con la parte in millisecondi di una determinata data.

Possiamo eseguire il codice seguente per restituire la porzione di millisecondi da born campo nel documento sopra.

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

Risultato:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Il $millisecond l'operatore accetta anche un timezone discussione.

Vedi MongoDB $millisecond 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 millisecondi, se necessario.

Sono disponibili identificatori di formato per ciascuna parte della data. Il %L l'identificatore di formato restituisce la porzione di millisecondi (3 cifre, zero imbottito).

Esempio:

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

Risultato:

{ "birthMillisecond" : "123" }
{ "birthMillisecond" : "112" }
{ "birthMillisecond" : "007" }

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 millisecond 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 millisecond campo nella fase successiva.

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

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

Risultato:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Quindi, ogni volta che usi $dateToParts nella tua pipeline, avrai accesso al millisecond 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 getMilliseconds() o getUTCMilliseconds() per restituire solo i millisecondi.

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

Risultato:

123
112
7

Il getUTCSeconds() Il metodo JavaScript restituisce un numero intero, compreso tra 0 e 999, che rappresenta la parte in millisecondi dell'oggetto data specificato.

Il getMilliseconds() 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 in millisecondi 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.getUTCMilliseconds();
    return c;
  }
);

Risultato:

[ 123, 112, 7 ]