【问题标题】:Converting a mongo stored date back into milliseconds since Unix epoch when loaded?加载时将 mongo 存储的日期转换回自 Unix 纪元以来的毫秒数?
【发布时间】:2019-04-19 11:33:02
【问题描述】:

我正在为我的网络服务器使用 Mongoose 和 Node.js。

作为我的一个文档架构的一部分,我有一个“时间戳”字段。 它在模式中的行是: timestamp: { type: Date, default: Date.now }

这很好用,并且允许我根据时间戳检索文档,但是,这会保存为 ISODate 格式,如下所述:http://docs.mongodb.org/manual/core/document/#date,如下所示:

"timestamp":"2013-04-04T19:31:38.514Z"

我不介意,但我按原样将其发送给客户。这意味着我必须在客户端使用 Date.parse() 才能与它进行比较操作。

有没有办法将日期存储为整数,或者在检索到时自动将其转换为整数?

有什么理由让我保持原样,只在客户端处理它?

提前致谢。

【问题讨论】:

    标签: node.js mongodb date mongoose


    【解决方案1】:

    您可以将timestamp 的数值毫秒版本添加为架构上的virtual 属性:

    schema.virtual('timestamp_ms').get(function() {
      return this.timestamp.getTime();
    });
    

    然后,您可以通过架构上的选项启用虚拟字段包含在模型实例上的 toObject 调用中:

    var schema = new Schema({
      timestamp: Date
    }, {
      toObject: { getters: true }
    });
    

    【讨论】:

    • ` {toObject: {virtuals: true}, toJSON: {virtuals: true}}` 适合我
    • 嘿,但这会添加一个新字段timestamp_ms,但是如果我希望在同一字段timestamp 中返回时间戳怎么办?那怎么办?
    【解决方案2】:
    var schema = new Schema({
      timestamp: {type:Number, default: new Date().getTime()}
    });
    

    希望这能解决您的问题。

    【讨论】:

    • 您不应该显式调用默认属性的方法,因为它获取的是创建时间而不是插入时间。所以,Date.now 工作得很好。
    【解决方案3】:

    作为最佳实践,我想说:让您的数据保持应有的类型

    无论如何,如果您的客户端需要处理数字,您可以简单地将日期以毫秒为单位传递给客户端,并且仍然可以在 Node 中使用 Date 对象。

    只需致电 timestamp.getTime() 和 ta-da,您就可以为客户端准备好 unix 时间戳。

    【讨论】:

      【解决方案4】:

      这对我来说很好用

      db.eurusd.ticks.findOne({_id:ObjectId("518636777055000000000000")}).t.getTime()
      

      以毫秒为单位返回时间,其中返回的文档具有结构

      {
       "_id" : ObjectId("518636777055000000000000"),
       "t" : ISODate("2013-05-05T10:37:43Z"), // date data type
       "ask" : "Joe",
       "bid" : 33
      }
      

      【讨论】:

        【解决方案5】:

        当您将 mongoose 类型设置为 "Date" 时,mongoose 会将时间戳转换为 UTC,因为时间戳是一个数字,而不是日期。那么如果你想存储时间戳,你应该将猫鼬类型设置为“数字”。

        myfield{
            type: Number,
            default: Date.now()
        }
        

        【讨论】:

          猜你喜欢
          • 2017-02-19
          • 2016-11-25
          • 2011-10-23
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2014-04-05
          • 1970-01-01
          相关资源
          最近更新 更多