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 ]