Denne artikel præsenterer 5 måder at returnere millisekundersdelen 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 millisekundersdelen fra born
felt af disse dokumenter.
$millisecond
Operatør
$millisecond
operatoren er designet specifikt til at returnere et dokument med millisekunderdelen af en given dato.
Vi kan køre følgende kode for at returnere millisekunderdelen fra born
felt i ovenstående dokument.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMillisecond: { $millisecond: "$born" }
}
}
]
)
Resultat:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
$millisecond
operatøren accepterer også en timezone
argument.
Se MongoDB $millisecond
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 millisekunderdelen returneres, hvis det kræves.
Der er formatspecifikationer for hver datodel. %L
formatspecifikationen returnerer millisekunddelen (3 cifre, nul polstret).
Eksempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
}
}
]
)
Resultat:
{ "birthMillisecond" : "123" } { "birthMillisecond" : "112" } { "birthMillisecond" : "007" }
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 millisecond
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 derefter overføres til næste trin i pipelinen, og vi kan derfor kun udtrække millisecond
felt i næste fase.
Her er, hvad der sker, hvis vi tilføjer endnu en projektion i blot millisecond
felt:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMillisecond: "$dateParts.millisecond"
}
}
]
)
Resultat:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
Så hver gang du bruger $dateToParts
i din pipeline vil du have adgang til millisecond
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 getMilliseconds()
eller getUTCMilliseconds()
for at returnere kun millisekunderne.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMilliseconds()
);
}
);
Resultat:
123 112 7
getUTCSeconds()
JavaScript-metoden returnerer et heltal mellem 0 og 999, der repræsenterer millisekunderdelen af det givne datoobjekt.
getMilliseconds()
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 millisekundervæ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 i en matrix.
Eksempel:
db.cats.find().map(
function(c) {
c = c.born.getUTCMilliseconds();
return c;
}
);
Resultat:
[ 123, 112, 7 ]