Mongodb 时间戳非常不准确 - mongoose

Mongodb timestamp is very inaccurate - mongoose

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

记录创建日期

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

就在今天早上,我在澳大利亚东部标准时间上午 8 点 (GMT+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

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

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

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

创建 createdAt 条目的代码在哪里?数据库和您的应用程序代码在不同的服务器上吗?这可以解释为什么 mongo 使用与 createdAt.

不同的日期创建对象 ID

如果它们在同一台服务器上,您应该 post 创建 createAt 时间字符串的代码。

发生的事情是,您在定义架构以设置 createdAt 的默认值时 调用 Date.now(),然后该值将用作默认值,直到您的应用下次重新启动为止。

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

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