Den här artikeln presenterar 5 sätt att returnera millisekundersdelen från ett Date-objekt i MongoDB.
Exempeldata
Anta att vi har en samling som heter cats
med följande dokument:
{ "_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") }
Följande exempel visar olika alternativ för att returnera millisekundersdelen från born
fältet för dessa dokument.
$millisecond
Operatör
$millisecond
operatorn är utformad specifikt för att returnera ett dokument med millisekundersdelen av ett givet datum.
Vi kan köra följande kod för att returnera millisekundersdelen från born
fältet i dokumentet ovan.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMillisecond: { $millisecond: "$born" }
}
}
]
)
Resultat:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
$millisecond
operatören accepterar också en timezone
argument.
Se MongoDB $millisecond
för mer information och exempel.
$dateToString
Operatör
$dateToString
operatorn konverterar ett datumobjekt till en sträng enligt ett användarspecificerat format. Användaren kan därför ange att bara millisekundersdelen returneras om så krävs.
Det finns formatspecifikationer för varje datumdel. %L
formatspecifikationen returnerar millisekundsdelen (3 siffror, noll vadderad).
Exempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
}
}
]
)
Resultat:
{ "birthMillisecond" : "123" } { "birthMillisecond" : "112" } { "birthMillisecond" : "007" }
Se MongoDB $dateToString
för mer information och exempel.
$dateToParts
Operatör
$dateToParts
operatören returnerar ett dokument som innehåller de beståndsdelar av ett givet BSON Date-värde som individuella egenskaper. De egenskaper som returneras är year
, month
, day
, hour
, minute
, second
och millisecond
.
Vi skulle därför kunna använda $dateToParts
i ett pipelinesteg, lägg sedan till ett annat pipelinesteg som extraherar millisecond
del.
Här är vad $dateToParts
returnerar för våra tre dokument:
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 } }
Detta resultat kan sedan skickas till nästa steg i pipelinen, och vi kan därför extrahera bara millisecond
fältet i nästa steg.
Här är vad som händer om vi lägger till ytterligare en projektion för bara millisecond
fält:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMillisecond: "$dateParts.millisecond"
}
}
]
)
Resultat:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
Så när du använder $dateToParts
i din pipeline kommer du att ha tillgång till millisecond
fältet (och de andra datumdelarna) i nästa steg.
Se MongoDB $dateToParts
för mer information och exempel.
forEach()
Metod
Du kan använda cursor.forEach()
att iterera genom markören med en JavaScript-metod som getMilliseconds()
eller getUTCMilliseconds()
för att returnera bara millisekunderna.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMilliseconds()
);
}
);
Resultat:
123 112 7
getUTCSeconds()
JavaScript-metoden returnerar ett heltal, mellan 0 och 999, som representerar millisekundersdelen av det givna datumobjektet.
getMilliseconds()
metod returnerar det i lokal tid.
Du kanske också märker att de tidigare alternativen returnerar ett helt dokument som innehåller ett namn/värdepar, medan det här alternativet bara returnerar det faktiska millisekundersvärdet och inte hela dokumentet.
map()
Metod
cursor.map()
metoden tillämpar en funktion på varje dokument som markören besöker och kombinerar värdena till en array.
Exempel:
db.cats.find().map(
function(c) {
c = c.born.getUTCMilliseconds();
return c;
}
);
Resultat:
[ 123, 112, 7 ]