猫鼬-获取日期范围重叠的地方

时间:2018-12-21 14:02:14

标签: node.js mongodb mongoose orm nosql

在带有猫鼬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开始

但是它正常工作。在重叠的日期上返回一个空数组

1 个答案:

答案 0 :(得分:0)

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

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

不是这样的:

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

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

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

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

enter image description here