我有一个类似这样的模式,其中我以对象数组的形式获得了startDate和endDate数组。请在下面找到截图。
现在我需要检查当前日期是否在任何可用日期范围之间。
这就是我一直在尝试的
db.products.aggregate([
{
"$match": {
"$and": [
{
"isDeleted": false
},
{
"isArchived": false
},
{
_id: ObjectId("63de4823561e0319a5745537")
},
{
bookings: {
'$elemMatch': {
$nin:[
{productBookingCompleteDate: { '$gt': new Date("2023-04-03T04:03:49.642Z") }},
{productBookingStartDate: { '$lt': new Date("2023-04-03T04:03:49.642Z") }}
]
}
}
}
]
}
},
...... // Rest of the logics
])
但如果当前日期在这些范围内,则返回数据,但我想要相反的情况。只有当当前日期不在任何日期范围内时,它才应该返回文档。
谁能帮我一下。
谢谢。
1条答案
按热度按时间qjp7pelc1#
如果当前日期介于startDate和endDate对象数组中的任意日期之间,要排除MongoDB文档,可以使用$elemMatch操作符检查是否存在包含当前日期的预订范围,然后使用$not操作符否定匹配,只返回当前日期不在任何预订范围内的文档。