В MongoDB, $toDate операторът за агрегиране преобразува стойност в дата
$toDate приема всеки валиден израз. Ако изразът не може да бъде преобразуван в дата, той връща грешка. Ако изразът е null или липсва, връща null .
Пример
Да предположим, че имаме колекция, наречена samples със следния документ:
{
"_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"),
"double" : 1613372035500.75,
"decimal" : NumberDecimal("1613372035500.75"),
"long" : NumberLong("1613372035500"),
"string" : "2021-02-15 06:53:55"
} Можем да използваме следната заявка, за да върнем всяка от тези стойности като дата.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty() Резултат:
{
"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")
} Както се очаква, всички полета се връщат със съответните им стойности, преобразувани в стойности за дата.
Може да забележите, че полето ObjectId връща различна дата спрямо останалите. Това е така, защото _id стойността на полето отразява датата, на която е създаден документът, докато другите дати са само произволни дати, създадени от мен. Повече за ObjectId по-долу.
Входни типове
$toDate операторът приема следните типове въвеждане:
- Двойно
- Десетичен знак
- Дълго
- Низ (трябва да е валиден низ за дата)
- ObjectId
Повече за тях по-долу.
Числови типове
Когато използвате числовите типове (двойно, десетично и дълго), $toDate връща дата, която съответства на броя милисекунди, представени от стойността. За Double и Decimal това е съкратената стойност. $toDate операторът интерпретира числови стойности, както следва:
- Положителната стойност съответства на броя милисекунди от 1 януари 1970 г.
- Отрицателна стойност съответства на броя милисекунди преди 1 януари 1970 г.
Типове низове
Когато използвате тип низ, низът трябва да бъде валиден низ за дата. Например:
"2021-02-15""15 February 2021""2021-02-15 06:53:55""2021-02-15 06:53:55+1100"
Не можете да използвате непълни дати или невалидни стойности като "Monday" , "March" , "2020" и др.
ObjectId
Стойностите на ObjectId са 12 байтови шестнадесетични стойности, които се състоят от:
- 4 байтова стойност на времеви печат, представляваща създаването на ObjectId, измерена в секунди след епохата на Unix.
- 5 байта е произволна стойност
- Брояч с нарастващ 3 байта, инициализиран на произволна стойност.
$toDate операторът връща частта от времевия печат като дата.