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 ]