【问题标题】:mongoose - get where date ranges overlap猫鼬 - 获取日期范围重叠的位置
【发布时间】:2019-05-22 00:03:10
【问题描述】:

在带有 mongoose ORM 的 nodejs 中,我试图进行查询以获取“开始”和“结束”日期与其他两个日期重叠的所有预订对象。

let start = req.params.start;
let end = req.params.end;

Booking.find({
    $or: [{userID: userID}, {invites: userID}],
    $or: [{ $and: [{ start: { $gte: start }}, {start: { $lte: end }}],
      $and: [{start: { $lte: start }}, {end: { $gte: start }}]}
    ]}

e1 开始 > e2 开始 AND e1 开始 e1 开始 AND e2 开始

但它不能正常工作。返回重叠日期的空数组

【问题讨论】:

    标签: node.js mongodb mongoose orm nosql


    【解决方案1】:

    你必须像这样拆分 $and 语句:

    $or : [{$and:...}, {$and:...}]
    

    不是这样的:

    $or : [{$and:... , $and:...}]
    

    否则,您将有一个只有一个选项的 $or 查询,这几乎是不可能实现的,因为满足此条件的唯一情况是,如果 start 和 end 完全等于输入值。

    此外,如果您希望所有事件以任何方式与给定时间范围相交,那么您仍然会错过四种可能的情况中的两种:

      $and: [{start: { $lte: start }}, {end: { $lte: start }}]}
      $and: [{start: { $gte: start }}, {end: { $gte: start }}]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2018-05-25
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多