I MongoDB er $millisecond aggregeringspipeline-operatør returnerer millisekunddelen af en dato som et heltal mellem 0 og 999 .
Du kan valgfrit angive en tidszone, der skal bruges til resultatet.
$millisecond operatøren accepterer enten en dato (som enten en dato, et tidsstempel eller et objekt-id) eller et dokument, der angiver dato og tidszone, der skal bruges.
Eksempel
Antag, at vi har en samling kaldet pets med følgende dokument:
{
"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
"name" : "Fetch",
"born" : ISODate("2020-12-31T23:30:15.123Z")
}
Vi kan køre følgende kode for at udtrække millisekunddelen fra born felt i det pågældende dokument.
db.pets.aggregate(
[
{
$project:
{
_id: 0,
birthMilliSecond: { $millisecond: "$born" }
}
}
]
) Resultat:
{ "birthMilliSecond" : 123 }
Her brugte jeg birthMilliSecond som feltnavnet, der skal returneres, men dette kunne have været hvad som helst (såsom milliSecondsAtBirth , milliSeconds , etc).
_id felt returneres som standard ved brug af projektioner i MongoDB, men i dette eksempel skjulte jeg eksplicit _id felt ved hjælp af _id: 0 .
Angiv en tidszone
Du kan angive en tidszone, der skal bruges til output af $millisecond operatør.
Når du gør dette, blev argumentet sendt til $millisecond skal have følgende form:
{ date: <dateExpression>, timezone: <tzExpression> }
Hvor <dateExpression> er den dato, der skal bruges, og <tzExpression> er den tidszone, der skal bruges.
Tidszonen kan specificeres ved at bruge enten Olsons tidszone-id (f.eks. "Europe/London" , "GMT" ) eller UTC offset (f.eks. "+02:30" , "-1030" ).
Olson Timezone Identifier
Her er et eksempel, der udsender millisekunderne i to forskellige tidszoner, hver ved hjælp af Olsons tidszone-id'er:
db.pets.aggregate(
[
{
$project: {
_id: 0,
kabul: {
$millisecond: { date: "$born", timezone: "Asia/Kabul" }
},
brisbane: {
$millisecond: { date: "$born", timezone: "Australia/Brisbane" }
}
}
}
]
) Resultat:
{ "kabul" : 123, "brisbane" : 123 } Da tidszoneændringen ikke påvirker millisekunderdelen, er resultatet det samme.
UTC offset
I dette eksempel bruger vi UTC offset.
db.pets.aggregate(
[
{
$project: {
_id: 0,
"utcOffset+04:30": {
$millisecond: { date: "$born", timezone: "+04:30" }
},
"utcOffset+05:45": {
$millisecond: { date: "$born", timezone: "+05:45" }
}
}
}
]
) Resultat:
{ "utcOffset+04:30" : 123, "utcOffset+05:45" : 123 } Returner Millisekunderne fra et ObjectId
Du kan bruge $millisecond for at returnere millisekunderdelen fra et ObjectId.
ObjectId-værdier er 12 byte hexadecimale værdier, der består af:
- En tidsstempelværdi på 4 byte, der repræsenterer objekt-id'ets oprettelse, målt i sekunder siden Unix-epoken.
- En 5 byte er en tilfældig værdi
- En 3 byte-tæller, initialiseret til en tilfældig værdi.
For at opsummere ser vores dokument sådan ud:
{
"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
"name" : "Fetch",
"born" : ISODate("2020-12-31T23:30:15.123Z")
}
Dette dokument indeholder et ObjectId. Vi kan derfor bruge $millisecond for at returnere millisekunddelen fra det objekt-id.
Men som nævnt er tidszonedelen af ObjectId kun målt i sekunder siden Unix-epoken, og den inkluderer derfor ikke en millisekunderdel.
Eksempel:
db.pets.aggregate(
[
{
$project:
{
"timeStamp": { $toDate: "$_id"},
"millisecond": { $millisecond: "$_id" }
}
}
]
).pretty() Resultat:
{
"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
"timeStamp" : ISODate("2021-01-19T01:11:35Z"),
"millisecond" : 0
}
Vi kan se, at tidsstemplet ikke inkluderer en millisekunddel, og resultatet er 0 .
I dette tilfælde brugte jeg også $toDate aggregeringspipeline-operatør for at returnere tidsstempeldelen af ObjectId.