14

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

4

3 回答 3

16

背景

  • unixtime值表示自纪元(1970 年 1 月 1 日)以来的秒数。

  • JavaScript Date() 表示自纪元以来的 毫秒数。

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

转换

要在 aunixtime和 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")
于 2013-03-01T13:34:53.070 回答
9

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

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

在这里试试

于 2018-07-27T21:52:48.417 回答
6

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

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

请注意该代码,与常规代码不同,find()它不会对结果进行分页,而是在不暂停的情况下打印每个匹配的文档。

于 2013-02-23T20:18:12.670 回答