python MongoDB查询不更新文档记录

4zcjmb1e  于 2023-06-28  发布在  Python
关注(0)|答案(1)|浏览(123)

我正在使用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上寻找解决方案,但它没有给予我任何结果。

n7taea2i

n7taea2i1#

这段代码似乎可以工作。请注意,如果您没有匹配的_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}}

相关问题