Mongodb时间戳非常不准确 - 猫鼬

时间:2015-05-07 22:20:11

标签: node.js mongodb mongoose

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

记录createdAt日期

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

就在今天早上我在澳大利亚东部标准时间上午8点(格林威治标准时间+10)创建了一个物体,但数据库中的时间早于7天。

这是数据库对象:

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

我在mac和win 7上都看到了这个问题。

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

更新

我在架构中设置createdAt日期,如下所示:

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

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

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

2 个答案:

答案 0 :(得分:5)

在定义架构以设置Date.now()的默认值时,您正在调用 createdAt,以及然后,该值将用于默认值,直到下次重新启动应用程序为止。

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

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

答案 1 :(得分:0)

如果您将对象ID粘贴到此处的网站:

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

您将看到此特定文档是今天创建的(2015-05-07T21:57:03.000Z)。对象id包含创建日期信息。

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

如果它们位于同一台服务器上,则应发布创建createAt时间字符串的代码。