Поиск по диапазону дат с проверкой доступности

Столкнулся с проблемой по созданию БД и поиском в ней. Логика работы примерно такая: Есть ресурс, у которого имеется тип и диапазон дат, когда ресурс свободен, в настоящий момент это выглядит примерно так:

{
    "_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"
    }
}

По этому поводу у меня несколько вопросов:

  1. Как лучше хранить и искать по диапазону дат в Mongodb, что мне можно улучшить в этой схеме?
  2. Как построить сложный запрос, на поиск всех доступных ресурсов для заявки/заявок для ресурсов? Критерии поиска: тип, доступность в диапазоне дат, схожие атрибуты. В основном непонимание у меня вызывает поиск по массиву диапазонов дат, указанных в ресурсе + учёт того, что на некоторый диапазон (необязательно на весь) может быть уже прикреплена заявка. Использую mongodb, symfony, doctrine. Заранее спасибо за помощь.

Ответы (0 шт):