I MongoDB er $toDate
aggregeringsoperator konverterer en værdi til en dato
$toDate
tager ethvert gyldigt udtryk. Hvis udtrykket ikke kan konverteres til en dato, returnerer det en fejl. Hvis udtrykket er null
eller mangler, returnerer den null
.
Eksempel
Antag, at vi har en samling kaldet samples
med følgende dokument:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Vi kan bruge følgende forespørgsel til at returnere hver af disse værdier som en Dato.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Resultat:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Som forventet returneres alle felter med deres tilsvarende værdier konverteret til datoværdier.
Du bemærker måske, at feltet ObjectId returnerer en anden dato end de andre. Dette er fordi _id
feltets værdi afspejler datoen, hvor dokumentet blev oprettet, mens de andre datoer kun var vilkårlige datoer oprettet af mig. Mere om ObjectId nedenfor.
Inputtyper
$toDate
operatøren accepterer følgende inputtyper:
- Dobbelt
- Decimal
- Lang
- String (skal være en gyldig datostreng)
- ObjectId
Mere om disse nedenfor.
Numeriske typer
Når du bruger de numeriske typer (dobbelt, decimal og lang), $toDate
returnerer en dato, der svarer til antallet af millisekunder repræsenteret af værdien. For Double og Decimal er dette den trunkerede værdi. $toDate
operatoren fortolker numeriske værdier som følger:
- En positiv værdi svarer til antallet af millisekunder siden 1. januar 1970.
- En negativ værdi svarer til antallet af millisekunder før 1. januar 1970.
Strengtyper
Når du bruger en strengtype, skal strengen være en gyldig datostreng. For eksempel:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Du kan ikke bruge ufuldstændige datoer eller ugyldige værdier såsom "Monday"
, "March"
, "2020"
osv.
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.
$toDate
operatør returnerer tidsstemplet som en Dato.