В 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
операторът връща частта от времевия печат като дата.