In MongoDB is de $toDate
aggregatie-operator converteert een waarde naar een datum
$toDate
elke geldige uitdrukking aanneemt. Als de uitdrukking niet kan worden geconverteerd naar een datum, wordt een fout geretourneerd. Als de uitdrukking null
. is of ontbreekt, retourneert het null
.
Voorbeeld
Stel dat we een verzameling hebben met de naam samples
met het volgende document:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
We kunnen de volgende query gebruiken om elk van die waarden als een datum te retourneren.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Resultaat:
{ "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") }
Zoals verwacht worden alle velden geretourneerd met de bijbehorende waarden geconverteerd naar datumwaarden.
Mogelijk merkt u dat het veld ObjectId een andere datum retourneert naar de andere. Dit komt omdat de _id
de waarde van het veld geeft de datum weer waarop het document is gemaakt, terwijl de andere datums gewoon willekeurige datums waren die door mij waren gemaakt. Meer over de ObjectId hieronder.
Invoertypen
De $toDate
operator accepteert de volgende invoertypen:
- Dubbel
- Decimaal
- Lang
- String (moet een geldige datumstring zijn)
- Object-ID
Hieronder meer hierover.
Numerieke typen
Bij gebruik van de numerieke typen (Dubbel, Decimaal en Lang), $toDate
geeft een datum terug die overeenkomt met het aantal milliseconden dat door de waarde wordt vertegenwoordigd. Voor dubbel en decimaal is dit de afgekapte waarde. De $toDate
operator interpreteert numerieke waarden als volgt:
- Een positieve waarde komt overeen met het aantal milliseconden sinds 1 januari 1970.
- Een negatieve waarde komt overeen met het aantal milliseconden vóór 1 januari 1970.
Tekenreeksen
Als u een tekenreekstype gebruikt, moet de tekenreeks een geldige datumtekenreeks zijn. Bijvoorbeeld:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
U kunt geen onvolledige datums of ongeldige waarden gebruiken, zoals "Monday"
, "March"
, "2020"
, enz.
Object-ID
ObjectId-waarden zijn hexadecimale waarden van 12 bytes die bestaan uit:
- Een tijdstempelwaarde van 4 byte, die de creatie van de ObjectId vertegenwoordigt, gemeten in seconden sinds het Unix-tijdperk.
- Een 5 byte is een willekeurige waarde
- Een oplopende teller van 3 bytes, geïnitialiseerd op een willekeurige waarde.
De $toDate
operator retourneert het tijdstempelgedeelte als een Datum.