在带有猫鼬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开始
但是它正常工作。在重叠的日期上返回一个空数组
答案 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 }}]}