Поиск по диапазону дат с проверкой доступности
Столкнулся с проблемой по созданию БД и поиском в ней. Логика работы примерно такая: Есть ресурс, у которого имеется тип и диапазон дат, когда ресурс свободен, в настоящий момент это выглядит примерно так:
{
"_id": {
"$oid": "605c98c036076e092a77f883"
},
"type": "hotel",
"attributes": {
"bed_places": 4,
"shower_room": true,
},
"status": "new",
"available": [{
"$ref": "available",
"$id": {
"$oid": "605c98c036076e092a77f884"
}
}, {
"$ref": "available",
"$id": {
"$oid": "605c98c036076e092a77f885"
}
}]
}
Где available выглядит так:
{
"_id": {
"$oid": "605c98c036076e092a77f884"
},
"from": {
"$date": "2021-03-24T21:00:00.000Z"
},
"to": {
"$date": "2021-03-30T21:00:00.000Z"
}
}
И есть заявка,
{
"_id": {
"$oid": "605c57dbd8b8f71c306ff0b0"
},
"attributes": {
"bed_places": 5,
"shower_room": true,
},
"type": "hotel",
"date_from": {
"$date": "2021-03-24T21:00:00.000Z"
},
"date_to": {
"$date": "2021-04-03T21:00:00.000Z"
}
}
По этому поводу у меня несколько вопросов:
- Как лучше хранить и искать по диапазону дат в Mongodb, что мне можно улучшить в этой схеме?
- Как построить сложный запрос, на поиск всех доступных ресурсов для заявки/заявок для ресурсов? Критерии поиска: тип, доступность в диапазоне дат, схожие атрибуты. В основном непонимание у меня вызывает поиск по массиву диапазонов дат, указанных в ресурсе + учёт того, что на некоторый диапазон (необязательно на весь) может быть уже прикреплена заявка. Использую mongodb, symfony, doctrine. Заранее спасибо за помощь.