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

MongoDB如何按日期筛选指定时间段内完全可用的学生文档

筛选指定时间段内完全可用的学生(MongoDB查询方案)

需求核心

要找出在available_from到available_to时间段内完全无假期冲突的学生,本质是确保学生的假期区间与指定可用区间无任何重叠,满足以下任一条件即可:

  • 学生假期在指定可用时间段开始前已结束(vacation_end < available_from)
  • 学生假期在指定可用时间段结束后才开始(vacation_start > available_to)

示例数据

你的学生文档结构如下:

[
  {
    "_id": 1,
    "name": "Anna",
    "vacation_start": "2024-01-01",
    "vacation_end": "2024-01-03"
  },
  {
    "_id": 2,
    "name": "Bob",
    "vacation_start": "2024-01-01",
    "vacation_end": "2024-01-05"
  },
  {
    "_id": 3,
    "name": "Zenna",
    "vacation_start": "2024-02-02",
    "vacation_end": "2024-02-10"
  }
]

具体查询语句

当输入参数为available_from=2024-01-04、available_to=2024-02-02时,对应的MongoDB查询命令如下:

db.students.find({
  $or: [
    { vacation_end: { $lt: "2024-01-04" } },
    { vacation_start: { $gt: "2024-02-02" } }
  ]
})

结果说明

  • Anna的假期结束于2024-01-03,早于指定时间段起始日,符合条件被返回
  • Bob的假期结束于2024-01-05,与指定时间段重叠,被排除
  • Zenna的假期起始日等于指定时间段结束日,不属于“结束后开始”,因此被排除

调整说明

  • 若日期字段存储为Date类型而非字符串,直接传入ISODate()对象即可,无需字符串转换
  • 若业务允许“假期刚好在边界点开始/结束”算可用,可将操作符改为$lte或$gte,根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:24:59