MongoDB更新语句无法修改文档记录问题求助
解决PyMongo/Motor中数字类型嵌套键无法更新的问题
问题核心是键的类型不匹配:你的文档里用户ID是数字类型的键,但代码中通过f-string把hikari.Snowflake转换成了字符串,导致MongoDB查找嵌套字段时,匹配的是字符串形式的用户ID键,而非数据库中实际存储的数字键,因此无法触发更新。
修正后的代码
直接用数字类型的用户ID构造嵌套更新字典,跳过字符串拼接的点路径:
async def add_reputation_to_db( self, guild_id: hikari.Snowflake, user_recieve_id: hikari.Snowflake, ) -> None: # 将hikari.Snowflake转为数字类型(Snowflake本身支持直接强转) user_id = int(user_recieve_id) await self._guild_collection.update_one( {'_id': guild_id}, {'$inc': {user_id: {'reputation': 1}}} )
原理说明
MongoDB对键的类型严格校验,字符串"123456"和数字123456会被识别为两个完全不同的键。你原代码生成的更新路径是"用户ID字符串.reputation",但数据库中对应的键是数字类型的用户ID,自然无法匹配到目标字段完成更新。
内容的提问来源于stack exchange,提问作者minikslyh
相关产品推荐
相关产品推荐

