W MongoDB $toDate operator agregacji konwertuje wartość na datę
$toDate przyjmuje dowolne prawidłowe wyrażenie. Jeśli wyrażenia nie można przekonwertować na datę, zwraca błąd. Jeśli wyrażenie ma wartość null lub brak, zwraca null .
Przykład
Załóżmy, że mamy kolekcję o nazwie samples z następującym dokumentem:
{
"_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"),
"double" : 1613372035500.75,
"decimal" : NumberDecimal("1613372035500.75"),
"long" : NumberLong("1613372035500"),
"string" : "2021-02-15 06:53:55"
} Możemy użyć następującego zapytania, aby zwrócić każdą z tych wartości jako datę.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty() Wynik:
{
"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")
} Zgodnie z oczekiwaniami, wszystkie pola są zwracane wraz z odpowiadającymi im wartościami przekonwertowanymi na wartości daty.
Możesz zauważyć, że pole ObjectId zwraca inną datę innym. Dzieje się tak, ponieważ _id wartość pola odzwierciedla datę utworzenia dokumentu, podczas gdy pozostałe daty były po prostu arbitralnymi datami utworzonymi przeze mnie. Więcej o ObjectId poniżej.
Typy danych wejściowych
$toDate operator akceptuje następujące typy danych wejściowych:
- Podwójny
- Dziesiętny
- Długie
- Ciąg (musi być prawidłowym ciągiem daty)
- Identyfikator obiektu
Więcej na ten temat poniżej.
Typy numeryczne
Używając typów numerycznych (Double, Decimal i Long), $toDate zwraca datę odpowiadającą liczbie milisekund reprezentowanych przez wartość. W przypadku Double i Decimal jest to wartość obcięta. $toDate operator interpretuje wartości liczbowe w następujący sposób:
- Wartość dodatnia odpowiada liczbie milisekund od 1 stycznia 1970 r.
- Wartość ujemna odpowiada liczbie milisekund przed 1 stycznia 1970 r.
Typy ciągów
W przypadku używania typu ciągu ciąg musi być prawidłowym ciągiem daty. Na przykład:
"2021-02-15""15 February 2021""2021-02-15 06:53:55""2021-02-15 06:53:55+1100"
Nie możesz używać niepełnych dat ani nieprawidłowych wartości, takich jak "Monday" , "March" , "2020" itp.
Identyfikator obiektu
Wartości ObjectId to 12-bajtowe wartości szesnastkowe, które składają się z:
- 4-bajtowa wartość znacznika czasu, reprezentująca utworzenie ObjectId, mierzona w sekundach od epoki Uniksa.
- 5 bajtów to wartość losowa
- Licznik przyrostowy o 3 bajty, zainicjowany do wartości losowej.
$toDate operator zwraca część znacznika czasu jako datę.