我必须使用 MEAN stack 为医生制定预约系统。在我的架构中,我必须存储时段的开始时间和结束时间。 Mongoose 没有存储时间的数据类型。我应该使用什么数据类型来存储时间?
Mongoose 的
Date
模式类型 不仅代表日期,还代表完整的日期和时间时间戳,因此这将是合乎逻辑的选择。
var slotSchema = new Schema({
startTime: Date,
endTime: Date,
...
});
您可以在定义 Schema 时将
timestamps
属性设置为 true
,mongoose 将为您添加 createdAt
和 updatedAt
字段。当您执行任何更新操作时,Mongoose 还会为您更新 updatedAt
字段。
var schema = new Schema({
// ... Schema properties
}, {
timestamps: true
});
Date 对象存储精确到毫秒的特定时刻。
参见:http://www.robertprice.co.uk/robblog/2011/05/javascript_date_time_and_node_js-shtml/
有关猫鼬的更多信息:http://mongoosejs.com/docs/guide.html
对于仅限时间的场景没有直接的解决方案。被迫使用日期并不总是适用。我决定使用类型字符串和使用正则表达式的自定义验证。
classTiming: {
type: String,
validate: {
validator: function (v) {
if (!v) {
return true;
}
return /([01]?[0-9]|2[0-3]):[0-5][0-9]/.test(v);
},
message: (props) => `${props.value} is not valid time!`,
},
},
时间似乎是一个被忽视的类型。无论是 zod 还是 joi,在撰写本文时都需要正则表达式方法:
classTiming: z
.string()
.regex(/([01]?[0-9]|2[0-3]):[0-5][0-9]/)
.optional()
.or(z.literal("")),
classTiming: Joi.string()
.regex(/([01]?[0-9]|2[0-3]):[0-5][0-9]/)
.empty(""),