【问题标题】:Mongodb timestamp is very inaccurate - mongooseMongodb时间戳非常不准确 - mongoose
【发布时间】:2015-05-07 22:20:10
【问题描述】:

我正在使用mongoose将对象存储在mongodb中,我使用Date.now()记录createdAt日期

我发现数据库中存储了错误的时间。差别很零星,已经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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇....谢谢。我也开始使用 pre.('save') 中间件,所以你不能用你想要的任何日期覆盖它。
    • 谢谢你的朋友,你刚刚救了我和我的队友们的命
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 那个页面真的很有帮助,没有意识到时间戳嵌入到了ObjectID中!我添加了一个指向包含我的代码的要点的链接。还没解决呢:(
    猜你喜欢
    • 2017-05-23
    • 2017-01-22
    • 2020-09-09
    • 2014-12-18
    • 2022-01-16
    • 2021-08-09
    • 2012-09-01
    • 2015-06-07
    • 2021-09-25
    相关资源
    最近更新 更多