从加载Unix时代开始,将mongo存储date转换回毫秒级?

我使用Mongoose&Node.js为我的networking服务器。

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

这工作正常,并允许我基于时间戳检索文档,但是,这保存为ISODate格式,如下所述: http ://docs.mongodb.org/manual/core/document/#date,如下所示:

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

我不介意这一点,但我把这个发送给客户。 这意味着我必须在客户端使用Date.parse(),然后才能与之进行比较操作。

有没有办法将date存储为整数,或者在检索时自动将其转换为一个?

我有什么理由保持现状,只是在客户端处理呢?

提前致谢。

您可以在模式中添加timestamp的数字毫秒版本作为虚拟属性:

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

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

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

这对我来说很好

 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 } 
 var schema = new Schema({ timestamp: {type:Number, default: new Date().getTime()} }); 

希望这将解决您的问题。

作为一个最佳实践,我会说: 保持你的数据是它应得的types

无论如何,如果你的客户端需要用数字来对待,你可以简单的把这个date以毫秒为单位传递给客户端,而且还可以在Node中使用Date对象。

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