Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 在mongodb中存储日期/时间的最佳方法_Datetime_Date_Mongodb - Fatal编程技术网

Datetime 在mongodb中存储日期/时间的最佳方法

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对象中,表示插入时间 因此,

我见过使用字符串、整数时间戳和mongo datetime对象

最好的方法是存储本地JavaScript,它映射到

本机类型支持一系列可用的方法,例如,可以在map reduce作业中使用这些方法

如果需要,可以分别使用
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);是从