TypeError: filter должен быть экземпляром dict, bson.son.SON или любого другого типа, который наследуется от collections.Mapping

В функции Python Если я пишу так, то получаю Ожидаемое выражение Pylance в vscode.

    document = await collection.find({'date': {$gte: {start_date}, $lte: {end_date}}}).to_list(100)

Здесь, date - это мое поле, а sart_date, end_date - это динамическое значение, которое определяет конкретный диапазон документов, которые я хочу получить из базы данных.

Затем, из-за ошибки Pylance, я изменил код следующим образом:

    query_string = {"date": f'{{date: {{$gte: {start_date}, $lte: {end_date}}}}}'}

    document = await collection.find(query_string["date"]).to_list(100)

Также, написав print(query_string), я получаю {date: {$gte: '2021-07-15T16:18:46.688Z', $lte: '2021-07-18T12:18:45.258Z'}} на терминале, что означает, что значение переменной query_string правильное. Даже если я проверяю этот запрос в приложении mongodb compass gui, он возвращает мне нужные данные из базы данных. Так почему же при выполнении функции возникает ошибка title? Пожалуйста, помогите мне

Для вашего удобства вся функция выглядит так:

# routing in FastAPI
@router.get('/api/{start_date}_{end_date}') 
async def query_date_from_person(start_date, end_date):
    query_string = {"date": f'{{date: {{$gte: {start_date}, $lte: {end_date}}}}}'}
    document = await collection.find(query_string["date"]).to_list(100)
    return document

Никто мне не помог, ну и ладно :) Наконец-то я решил свою собственную проблему и отвечаю, потому что в будущем у меня есть мгновенное решение для других людей, которое я не получил от сообщества.

@router.get('/api/{start_date}_{end_date}')
async def query_date_from_person(start_date: str, end_date: str):
    document = await collection.find({"date": {"$gte": start_date, 
                                      "$lte": end_date}}).to_list(100)
    return document
Вернуться на верх