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

MongoDB查询:如何筛选可容纳完整预约时段的working_range数组

MongoDB查询:匹配完全包含预约时段的可用区间

需求分析

我们需要从目标集合中筛选出满足以下条件的文档:其working_range数组中存在至少一个可用时段,能够完全包含指定的预约时段——即预约的起始秒数≥该可用时段的from值,且预约的结束秒数≤该可用时段的to值。

查询语句实现

假设指定的预约起始秒数为bookStart,结束秒数为bookEnd,对应的MongoDB查询语句如下:

db.collection.find({
  working_range: {
    $elemMatch: {
      from: { $lte: bookStart },
      to: { $gte: bookEnd }
    }
  }
})

示例验证

针对你给出的测试场景,该查询的表现如下:

  • 例1:预约时段26000秒至27000秒 → 匹配到working_range中from=25000、to=50000的元素,返回对应文档。
  • 例2:预约时段20000秒至27000秒 → 没有可用时段的from值≤20000,无匹配结果。
  • 例3:预约时段55000秒至65000秒 → 第一个可用时段的to=50000小于65000,第二个可用时段的from=60000大于55000,无匹配结果。
  • 例4:预约时段65000秒至70000秒 → 匹配到working_range中from=60000、to=70000的元素,返回对应文档。

性能优化建议

如果集合数据量较大,为了提升查询效率,可以给working_range的from和to字段创建复合索引:

db.collection.createIndex({ "working_range.from": 1, "working_range.to": 1 })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:06:16