You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js开发中如何设计Mongoose字段存储用户每周工作日排班信息

horarios 字段设计方案

你当前定义的horarios字段为Date类型,只能存储单个时间点,不符合每周重复排班的存储需求,可根据业务场景选择以下两种实现方案:


场景1:仅需存储每周可上班的工作日,无需记录上下班具体时间

适合仅需要标记用户每周哪几天上班的轻量场景,字段定义如下:

horarios: {
  type: [Number], // 数组元素对应星期:0=周日,1=周一,2=周二,...,6=周六
  required: false,
  default: [], // 默认无排班
  enum: [0, 1, 2, 3, 4, 5, 6], // 限制值只能是0-6的合法星期值
  select: true
}

使用示例:

  • 用户选择周一到周五上班,存储值为[1,2,3,4,5]
  • 查询所有周三上班的用户,直接执行User.find({ horarios: 3 })即可

场景2:需要存储每个工作日的上下班具体时间(通用排班场景)

适合需要记录每天上下班时段的业务,先定义单日排班子Schema,再关联到用户主Schema:

// 单日排班规则子Schema
const DailyScheduleSchema = new mongoose.Schema({
  weekDay: {
    type: Number,
    required: true,
    enum: [0, 1, 2, 3, 4, 5, 6] // 0=周日,1=周一...6=周六
  },
  startTime: {
    type: String, // 存储格式为"HH:mm",例:"09:00"
    required: true
  },
  endTime: {
    type: String, // 存储格式为"HH:mm",例:"18:00"
    required: true
  },
  isOff: {
    type: Boolean, // 可选扩展字段,标记该天是否调休
    default: false
  }
})

// 替换原有horarios字段定义
horarios: {
  type: [DailyScheduleSchema],
  required: false,
  default: [],
  select: true
}

使用优势:

  • 支持灵活配置不同工作日的不同上下班时段,比如周一上9:00-18:00、周三上10:00-19:00都可单独存储
  • 支持多条件查询排班:例查询所有周一早上9点上班的用户,执行User.find({ "horarios.weekDay": 1, "horarios.startTime": "09:00" })即可
  • 可扩展性强,后续如果需要支持多周不同排班,只需在子Schema新增weekStartDate字段标记生效周即可

内容的提问来源于stack exchange,提问作者Paulo Avila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:06:01