从加载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时间戳了。