Есть ли способ показать временную метку в формате unix для ISODate?

Мы сохранили дату, используя временную метку unix в MongoDB, как мне получить дату, когда я делаю запрос? Есть ли способ отображать временную метку в формате 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"
    }
  }}
])

Попробуйте здесь