我有一个日历模型,其模式如下(用于存储相邻时间段的车辆状态)
const calendarSchema = new Schema( {
vehicleId: String,
startTime: Date,
endTime: Date,
availability: {type:String, enum: [ 'Available', 'Booked', 'Partially_Available']
})
现在我想搜索的车辆,要么是 Available
或 Partially_Available
之间 2021-01-01T12:00:00
到 2021-01-01T15:00:00
对于vehicleId:123,我有以下文件在集合中。
{
vehicleId:123,
startTime: 2021-01-01T12:00:00,
endTime: 2021-01-01T13:00:00
availability: 'Available'
},
{
vehicleId:123,
startTime: 2021-01-01T13:00:00,
endTime: 2021-01-01T14:00:00
availability: 'Partially_Available'
}
{
vehicleId:123,
startTime: 2021-01-01T14:00:00,
endTime: 2021-01-01T15:00:00
availability: 'Available'
}
现在我如何写查询,使我得到 vehicleId
的,要么是 Available
或 Paritally_Available
之间 2021-01-01T12:00:00
到 2021-01-01T15:00:00
这意味着如果任何车辆有 Booked
在这两个时间段之间的任何时间段,它不应该出现在结果中。 对于上述情况 vehicleId:123
应出现在结果中。如果上述任何一个条目有状态 Booked
, vehicleId:123
不应出现在结果中。
先谢谢你的建议。我这几天一直在绞尽脑汁地寻找解决方案,但还没有找到。
试试这个
db.collection.find({
availability: {
$in: [ "Available", "Partially_Available" ]
},
startTime: {
$gte: ISODate("2021-01-01T12:00:00.000Z")
},
endTime: {
$lte: ISODate("2021-01-01T15:00:00.000Z")
}
})
你可以在这里测试 艋舺游乐场