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 ]