Запрос MongoDB не обновляет запись документа

Я используюpymongoверсия 4.3.3 иmotorверсия 3.1.2

Это мой код:

      async def add_reputation_to_db(
    self,
    guild_id: hikari.Snowflake,
    user_recieve_id: hikari.Snowflake,
) -> None:
    await self._guild_collection.update_one({'_id': guild_id}, {'$inc': {f'{user_recieve_id}.reputation': 1}})

У меня нет ошибок, но проблема в том, что база данных не обновляет никаких данных, если я использую точку для перехода к определенному ключу в словаре, в моем случае это так.f'{user_recieve_id}.reputation'.

Иерархия моего документа выглядит следующим образом:

      {
    '_id': guild_id,
    'user_id': {
        'reputation': 123
    }        
}

Ноuser_idдолжен быть идентификатором пользователя в виде числа.

Искал решения в интернете и ChatGPT, но результатов это мне не дало.

1 ответ

Кажется, этот фрагмент кода работает. Обратите внимание: если у вас нет подходящего_idничего не будет установлено.

      from pymongo import MongoClient

db = MongoClient()['mydatabase']
guild_id = 1
user_recieve_id = 'user1'
coll.insert_one({"_id": guild_id})

coll.update_one({'_id': guild_id}, {'$inc': {f'{user_recieve_id}.reputation': 1}})
print(coll.find_one())

coll.update_one({'_id': guild_id}, {'$inc': {f'{user_recieve_id}.reputation': 1}})
print(coll.find_one())

принты:

      {'_id': 1, 'user1': {'reputation': 1}}
{'_id': 1, 'user1': {'reputation': 2}}
Другие вопросы по тегам