You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:22:03