我正在使用Mongoose&我的网络服务器的Node.js。
作为我的一个文档架构的一部分,我有一个'timestamp'字段。
架构中的行是:
timestamp: { type: Date, default: Date.now }
这很好用,并且允许我根据时间戳检索文档,但是,这会按照此处所述的ISODate格式保存:http://docs.mongodb.org/manual/core/document/#date,如下所示:
"timestamp":"2013-04-04T19:31:38.514Z"
我不介意这个,但我把它发送给客户端。这意味着我必须在客户端使用Date.parse()才能进行比较操作。
有没有办法将日期存储为整数,或者在检索时自动将其转换为1?
我有什么理由保留它是怎么回事,只是在客户端处理它?</ p>
提前致谢。
答案 0 :(得分:16)
您可以在模式中添加timestamp
的数字毫秒版本作为virtual属性:
schema.virtual('timestamp_ms').get(function() {
return this.timestamp.getTime();
});
然后,您可以通过模式上的选项在模型实例的toObject
调用中启用虚拟字段:
var schema = new Schema({
timestamp: Date
}, {
toObject: { getters: true }
});
答案 1 :(得分:6)
var schema = new Schema({
timestamp: {type:Number, default: new Date().getTime()}
});
希望这能解决您的问题。
答案 2 :(得分:3)
作为最佳做法,我会说:保持您的数据应有的类型。
无论如何,如果您的客户需要处理数字,您只需将日期作为毫秒传递给客户端,并仍然可以使用Node中的Date对象。
只需致电timestamp.getTime()
和ta-da,就可以为客户端准备好unix时间戳。
答案 3 :(得分:3)
这对我来说很好用
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
}
答案 4 :(得分:0)
当您将猫鼬类型设置为“ Date”时,猫鼬会将时间戳转换为UTC,因为时间戳是数字,而不是日期。那么如果要存储时间戳,则应将猫鼬类型设置为“数字”。
myfield{
type: Number,
default: Date.now()
}