有没有办法以unix格式向ISODate显示时间戳?

时间:2013-02-23 15:07:03

标签: mongodb mongodb-query aggregation-framework

我们在MongoDB中使用unix时间戳存储了一个日期,如何在查询时获取日期?有没有办法以ISODate格式显示时间戳?

3 个答案:

答案 0 :(得分:12)

背景

  • 自纪元(1970年1月1日)起,unixtime值代表

  • 自纪元以来,JavaScript Date()代表毫秒

  • 在MongoDB中,ISODate()Date()的便捷包装器,允许您从mongo shell中的ISO字符串创建日期。如果您在shell中使用new Date(),则会返回ISODate()

转换

要在unixtime和ISODate()之间进行转换,您可以将unix时间戳乘以1000,并将此值传递给new Date()构造函数。

mongo shell中的一个简单示例:

> 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")

答案 1 :(得分:5)

在Mongo控制台中,您可以在文档打印到屏幕之前从时间戳创建JavaScript Date对象:

> db.stuff.find().forEach(function (doc) {
  doc["timestamp_field"] = new Date(doc["timestamp_field"])
  printjson(doc)
})

小心使用该代码,与常规find()不同,它不会分页结果,而是打印每个匹配的文档而不会暂停。

答案 2 :(得分:3)

Mongodb 4.0引入了$toDate聚合,因此您可以尝试使用它

db.collection.aggregate([
  { "$project": {
    "toDate": {
      "$toDate": "$unixTimestamp"
    }
  }}
])

尝试here