Datetime 在mongodb中存储日期/时间的最佳方法
我见过使用字符串、整数时间戳和mongo datetime对象 最好的方法是存储本地JavaScript,它映射到 本机类型支持一系列可用的方法,例如,可以在map reduce作业中使用这些方法 如果需要,可以分别使用Datetime 在mongodb中存储日期/时间的最佳方法,datetime,date,mongodb,Datetime,Date,Mongodb,我见过使用字符串、整数时间戳和mongo datetime对象 最好的方法是存储本地JavaScript,它映射到 本机类型支持一系列可用的方法,例如,可以在map reduce作业中使用这些方法 如果需要,可以分别使用getTime()方法和Date(毫秒)构造函数,轻松地将Date对象转换为Unix时间戳1)和Unix时间戳1) 1) 严格来说,Unix时间戳是以秒为单位的。JavaScript日期对象从Unix纪元开始以毫秒为单位度量。一个日期戳已经存在于_id对象中,表示插入时间 因此,
getTime()
方法和Date(毫秒)
构造函数,轻松地将Date
对象转换为Unix时间戳1)和Unix时间戳1)
1) 严格来说,Unix时间戳是以秒为单位的。JavaScript日期对象从Unix纪元开始以毫秒为单位度量。一个日期戳已经存在于_id对象中,表示插入时间
因此,如果插入时间是您所需要的,那么它已经存在了:
登录到mongodb shell
ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test
通过插入项目创建数据库
> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
>
让我们将该数据库设置为我们现在使用的数据库
> use penguins
switched to db penguins
取回行:
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53
以yyyy-MM-dd HH:MM:ss格式获取每一行:
> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }
> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53
如果最后一行代码让您感到困惑,我将在这里介绍它是如何工作的:它将如何存储在数据库中?作为mongo datetime对象?@Thilo:MongoDB据我所知没有特殊的“datetime”对象。它使用JavaScript日期类型,该类型以BSON形式存储。@Thilo:正确,这基本上是JavaScript日期对象的BSON表示形式。它是一个64位整数,存储自Unix纪元以来的毫秒数,并支持(大多数?)来自的方法。@aboozarajabi
389
和240
是时间戳的毫秒数。中的Z
告诉MongoDB您提供的时间戳是UTC。如果您随后将其读回,应用程序可能会将其转换为本地时区,使其看起来好像时间已经改变了。但是时间还是一样的,只是从不同的时区角度来解释。例如,12:50:42Z
和13:50:42+01:00
代表同一时刻。@aboozarajabi一般来说,只要初始输入正确,您不想关心它的存储方式。如果CET中现在是21:56:03+01:00
,并且您插入了newdate()
,那么MongoDB可能将其表示为20:56:03Z
。但当您使用本地时区设置(CET)将其读回并显示在应用程序中时,它将再次读取21:56:03
。但它是文档保存在数据库中的时间戳,有时,您希望存储与插入日期无关的日期和时间。如果您的数据库速度非常快,并且两个文档存储在同一毫秒内。。这些文档是否具有相同的\u id
?@Redsandro否,但它们可能具有相同的\u id.getTimestamp()
@kmiyashiro结果,您是否知道如何基于该时间戳进行排序?无需担心,排序({createdOn:-1);是从