Denne artikel præsenterer 5 måder at returnere sekunddelen fra et Date-objekt i MongoDB.
Eksempel på data
Antag, at vi har en samling kaldet cats
med følgende dokumenter:
{ "_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") }
De følgende eksempler viser forskellige muligheder for at returnere sekunderdelen fra born
felt af disse dokumenter.
$second
Operatør
$second
operatør er designet specifikt til at returnere et dokument med sekunddelen af en given dato.
Vi kan køre følgende kode for at returnere sekunderdelen fra born
felt i ovenstående dokument.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthSecond: { $second: "$born" }
}
}
]
)
Resultat:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
Du kan også angive tidszonen, når du bruger $second
operatør.
Se MongoDB $second
for mere information og eksempler.
$dateToString
Operatør
$dateToString
operator konverterer et datoobjekt til en streng i henhold til et brugerspecificeret format. Brugeren kan derfor angive, at kun sekunderdelen returneres, hvis det kræves.
Der er formatspecifikationer for hver datodel. %S
formatspecifikationen returnerer den anden del (2 cifre, nul polstret).
Eksempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthSecond: { $dateToString: { format: "%S", date: "$born" } }
}
}
]
)
Resultat:
{ "birthSecond" : "15" } { "birthSecond" : "20" } { "birthSecond" : "01" }
Se MongoDB $dateToString
for mere information og eksempler.
$dateToParts
Operatør
$dateToParts
operatør returnerer et dokument, der indeholder de bestanddele af en given BSON Date-værdi som individuelle egenskaber. De returnerede egenskaber er year
, month
, day
, hour
, minute
, second
og millisecond
.
Vi kunne derfor bruge $dateToParts
i et pipeline-trin, tilføj derefter et andet pipeline-trin, der uddrager second
del.
Her er hvad $dateToParts
returnerer for vores tre dokumenter:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Resultat:
{ "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 } }
Dette resultat kan så videresendes til næste trin i pipelinen, og vi kan derfor kun udtrække second
felt i næste fase.
Her er, hvad der sker, hvis vi tilføjer endnu en projektion i et second
felt:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthSecond: "$dateParts.second"
}
}
]
)
Resultat:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
Så hver gang du bruger $dateToParts
i din pipeline, vil du have adgang til second
felt (og de andre datodele) i næste fase.
Se MongoDB $dateToParts
for mere information og eksempler.
forEach()
Metode
Du kan bruge cursor.forEach()
at iterere gennem markøren ved hjælp af en JavaScript-metode såsom getSeconds()
eller getUTCSeconds()
for at returnere kun sekunderne.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCSeconds()
);
}
);
Resultat:
15 20 1
getUTCSeconds()
JavaScript-metoden returnerer et heltal mellem 0 og 59, der repræsenterer sekunderne på den givne dato i henhold til universel tid.
getSeconds()
metode returnerer det i lokal tid.
Du kan også bemærke, at de tidligere muligheder returnerer et helt dokument, der indeholder et navn/værdi-par, hvorimod denne indstilling kun returnerer den faktiske sekunderværdi og ikke hele dokumentet.
map()
Metode
cursor.map()
metoden anvender en funktion på hvert dokument, der besøges af markøren og kombinerer værdierne til en matrix.
Eksempel:
db.cats.find().map(
function(c) {
c = c.born.getUTCSeconds();
return c;
}
);
Resultat:
[ 15, 20, 1 ]