Mongodb时间戳非常不准确 – mongoose

我使用mongoose在mongodb中存储对象,我使用Date.now()loggingcreatedAtdate

我所发现的是错误的时间被存储在数据库中。 差异非常零星,已经7天,3天,甚至5分钟了。

就在今天早上,我在早上8点(格林尼治标准时间+10)AEST创build了一个对象,但数据库中的时间早了7天。

这是数据库对象:

{ "_id": "554bdfaf797cb8e02753e06f", "description": "test d", "createdBy": "testuser", "key": "f1a593f4dd51e632388a1755e09a7b4dc0bc0e24ef8bcf5cf859ac759a45e8a6", "__v": 0, "files": [], "createdAt": "2015-05-01T05:42:07.687Z" } 

我已经看到这个问题在我的Mac和赢7。

首先在mongodb版本2.6.3上注意到,刚刚升级到3.0.2,没有变化。

更新

我在模式中设置createdAtdate如下所示:

 var uploadSchema = new Schema({ createdAt: { type: Date, required: true, default: Date.now() }, 

我的数据库和应用程序在同一台主机上运行。

要点在这里 – https://gist.github.com/reecefenwick/1bcff85d18406b33e5cf

发生什么事情就是在定义模式时调用 Date.now()Date.now()设置默认值,然后将该值用于默认值,直到下次重新启动应用程序时为止。

相反,您要将默认值设置为Date.now函数本身,以便每次创build新文档时都会调用它:

 var uploadSchema = new Schema({ createdAt: { type: Date, required: true, default: Date.now }, 

如果您将对象ID粘贴到网站中:

http://steveridout.github.io/mongo-object-time/

你会看到这个特定的文档是今天创build的( 2015-05-07T21:57:03.000Z )。 对象ID包含创builddate信息。

在哪里创buildcreatedAt条目的代码在哪里? 数据库和应用程序代码是否在不同的服务器上? 这可以解释为什么mongo使用与createdAt不同的date创build对象ID。

如果它们在同一台服务器上,则应该发布创buildcreateAt时间string的代码。