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.