我试图查找特定的startDate和endDate是否与mongoDb中的任何日期对象重叠。
以下是db
中的数据
请注意,这是一个对象数组。
现在我有了这样的约会
init Date >>>>>>>>>>>>>>>>> 2023-03-23T04:03:49.642Z
Ending Date >>>>>>>>>>>>>>>>> 2023-04-10T04:03:49.642Z
现在我需要返回这个文档,如果它是重叠的,否则什么都不返回。
这是我一直在努力做的
const getAvailabilityDetails = await Products.find({
_id: pid,
bookings: {
$elemMatch: {
// $and: [
productBookingStartDate: { $lt: new Date(initDate.toString()).toISOString() },
productBookingCompleteDate: { $gt: endingDayBufferCalcWithContractDays }
// ]
}
}
});
它在任何情况下都不起作用。在调试查询中,我得到了这样的东西。
Mongoose: products.find({ _id: ObjectId("63de4823561e0319a5745537"), bookings: { '$elemMatch': { productBookingStartDate: { '$lt': new Date("Thu, 23 Mar 2023 04:03:49 GMT") }, productBookingCompleteDate: { '$gt': new Date("Mon, 10 Apr 2023 04:03:49 GMT") } } }}, { projection: {} })
任何人都可以请帮助我解决这个问题。
1条答案
按热度按时间9nvpjoqh1#
为了检查时间范围
a
-〉b
和时间范围c
-〉d
之间的重叠,我们需要接受4个选项:[acdb
,cabd
,cadb
,acbd
]并拒绝两个选项:[abcd
,cdab
],所以我们想找到c
〈b
和d
〉a
的情况:了解它在playground example上的工作原理