Node.js环境下MongoDB如何存储HH-MM-SS格式的时间数据
问题解答
完全可以实现,根据你的后续使用场景可以选择两种不同的实现方案:
方案1:直接使用String类型存储(适合仅需存储展示的场景)
你当前设置的String类型本身就可以直接存储HH-MM-SS格式的字符串,只需要加上Mongoose自带的校验规则,就能保证存入的内容严格符合格式要求,示例代码如下:
const register_schema = new Schema({ arrived_at: { type: String, // 正则校验:匹配00-23的小时,00-59的分钟和秒,严格符合HH-MM-SS格式 match: /^([01]\d|2[0-3])-([0-5]\d)-([0-5]\d)$/, required: true // 可根据需求设置是否必填 }, gone_at: { type: String, match: /^([01]\d|2[0-3])-([0-5]\d)-([0-5]\d)$/ } })
如果写入的内容不符合格式要求,Mongoose会直接抛出校验错误,不会把非法数据写入数据库。
方案2:使用Date类型存储(适合需要时间计算/筛选的场景)
如果你后续需要对这两个字段做时间运算(比如计算停留时长、按时间段筛选记录),更推荐用Date类型存储数据,在查询返回时再格式化为HH-MM-SS格式,时间操作的灵活度会高很多,示例代码如下:
// Schema定义 const register_schema = new Schema({ arrived_at: { type: Date }, gone_at: { type: Date } }) // 时间格式化工具函数(也可以用dayjs等第三方库实现) const formatToHMS = (date) => { const hours = String(date.getHours()).padStart(2, '0') const minutes = String(date.getMinutes()).padStart(2, '0') const seconds = String(date.getSeconds()).padStart(2, '0') return `${hours}-${minutes}-${seconds}` } // 查询时格式化返回 const records = await Register.find() const result = records.map(record => ({ ...record.toObject(), arrived_at: formatToHMS(record.arrived_at), gone_at: formatToHMS(record.gone_at) }))
内容的提问来源于stack exchange,提问作者GNETO DOMINIQUE
相关产品推荐
相关产品推荐

