Не срабатывает метод update_one библиотеки pymongo

Создал метод, изменяющий данные пользователя в базе данных mongodb для приложения fastapi.

import motor.motor_asyncio

client = motor.motor_asyncio.AsyncIOMotorClient(MONGO_DB)
client.get_io_loop = asyncio.get_running_loop
database = client.mydb
users = database.get_collection('users')

async def update_user(email: str, data: dict) -> bool:
    if len(data) < 1:
        return False
    user = await users.find_one({"email": email})
    if user:
        updated_user = await users.update_one({"email": email}, {"$set": data})
        if updated_user:
            return True
        return False

В итоге метод возвращает True, но данные в базе данных не изменяются. Всю голову сломал, ума не приложу в чем проблема. При этом методы find_one и insert_one срабатывают. Помогите пожалуйста, уже три дня мучаюсь с этой проблемой.


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

Автор решения: SerjK
  1. Попробуйте использовать метод:

    find_one_and_update(filter, update, projection=None, sort=None,
        upsert=False, return_document=False, array_filters=None,
        hint=None, session=None, **kwargs)
    

    https://motor.readthedocs.io/en/stable/api-asyncio/asyncio_motor_collection.html#motor.motor_asyncio.AsyncIOMotorCollection.find_one_and_update

  2. Вы проверяете при обновлении на истину, в то время как возвращается

    https://pymongo.readthedocs.io/en/3.12.0/api/pymongo/results.html#pymongo.results.UpdateResult

→ Ссылка