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

Ada*_*Lee 13 mongodb mongodb-query aggregation-framework

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

Ste*_*nie 13

背景

  • unixtime值表示,因为历元(1970年1月1日).

  • JavaScript的日期() 表示毫秒,因为时代.

  • 在MongoDB中,它ISODate()是一个便利包装器Date(),允许您从mongoshell中的ISO字符串创建日期.如果你new Date()在shell中使用它将返回一个ISODate().

转变

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

mongoshell 中的一个简单示例:

> 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")
Run Code Online (Sandbox Code Playgroud)


Ash*_*shh 7

Mongodb 4.0 引入了$toDate聚合,大家可以试试

db.collection.aggregate([
  { "$project": {
    "toDate": {
      "$toDate": "$unixTimestamp"
    }
  }}
])
Run Code Online (Sandbox Code Playgroud)

在这里试试


The*_*heo 5

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

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

请注意该代码,与常规代码不同,find()它不会分页结果,而是打印每个匹配的文档而不会暂停.

  • 需要乘以1000,正如Stennie在下面提到的那样. (3认同)