Мы сохранили дату, используя временную метку unix в MongoDB, как мне получить дату, когда я делаю запрос? Есть ли способ отображать временную метку в формате ISODate?
Есть ли способ показать временную метку в формате unix для ISODate?
Ответ 1
Задний план
-
Значение unixtime представляет секунды с эпохи (1 января 1970 г.).
-
Дата JavaScript() представляет миллисекунды с эпохи.
-
В MongoDB
ISODate()
является удобной оболочкой дляDate()
которая позволяет вам создавать даты из строк ISO в оболочкеmongo
. Если вы используетеnew Date()
в оболочке, она вернетISODate()
.
преобразование
Чтобы преобразовать между unixtime
и ISODate(), вы можете умножить свои временные метки unix на 1000 и передать это значение new Date()
.
Простой пример в оболочке mongo
:
> db.mydata.insert({
unixtime: 1362143511
})
> var doc = db.mydata.findOne();
// convert unixtime seconds to milliseconds and create JS date
> var date = new Date(doc.unixtime * 1000);
> date
ISODate("2013-03-01T13:11:51Z")
Ответ 2
В консоли Mongo вы можете создать объект Date
JavaScript из метки времени, прежде чем документ будет напечатан на экране:
> db.stuff.find().forEach(function (doc) {
doc["timestamp_field"] = new Date(doc["timestamp_field"])
printjson(doc)
})
Будьте осторожны с этим кодом, в отличие от обычной find()
он не будет отображать результаты, но печатает каждый соответствующий документ без паузы.
Ответ 3
Mongodb 4.0 ввел агрегацию $toDate
, поэтому вы можете попробовать с ней
db.collection.aggregate([
{ "$project": {
"toDate": {
"$toDate": "$unixTimestamp"
}
}}
])
Попробуйте здесь