MongoDB请假记录重叠日期查询失效,求正确匹配查询写法
MongoDB 请假日期重叠校验查询方案
核心重叠判断逻辑
两个时间段只要满足 已有请假开始时间 <= 用户输入结束时间 且 已有请假结束时间 >= 用户输入开始时间,就属于重叠场景,可覆盖所有重叠情况,不需要写复杂的多分支判断。
正确查询语句
假设用户输入的待校验时间段为inputStart(2021-11-24 00:00:00 GMT)和inputEnd(2021-11-28 00:00:00 GMT),查询语句如下:
[ { '$match': { // 可根据业务需求加有效状态过滤,比如只查询审批通过的请假 'leaveStatus': 1, // 核心重叠判断条件 'fromDate': { '$lte': new Date('2021-11-28T00:00:00.000Z') }, 'toDate': { '$gte': new Date('2021-11-24T00:00:00.000Z') } } } ]
覆盖的所有重叠场景
- 已有请假完全被用户输入时间段包含(对应需求场景:已有25-27,用户输入24-28)
- 用户输入时间段完全被已有请假包含
- 已有请假和用户输入时间段左边界重叠
- 已有请假和用户输入时间段右边界重叠
- 两个时间段完全重合
如果查询返回结果不为空,说明当前输入时间段存在重叠的有效请假,不允许提交申请。
内容的提问来源于stack exchange,提问作者Ezad Abada
相关产品推荐
相关产品推荐

