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

Python如何判断MongoDB查询返回的对象是否存在revokedTokens属性

问题原因

PyMongo的find_one()方法返回的查询结果是Python字典(dict)类型,不是自定义类的实例对象:

  • hasattr()函数是用来判断类实例对象是否包含某个属性的,不适用于字典的键存在性判断
  • 你用hasattr(user, "revokedTokens")永远返回False,所以一直走else分支

修正方案

把判断条件改成判断revokedTokens是否是字典的键即可,两种常用写法可按需选择:

写法1:用in关键字判断键是否存在(保留原有分支日志)

usersCollection = db["users"]
searchQuery = { "username": username }
user = usersCollection.find_one(searchQuery)

print("user is:")
print(user)

if "revokedTokens" in user:
    print("appending")
    user["revokedTokens"].append("another")
    #user["revokedTokens"].append(jwt)
else:
    print("adding first element")
    user["revokedTokens"] = ["first"]
    #user["revokedTokens"] = [jwt]

写法2:用字典get方法设置兜底默认值(代码更简洁)

如果不需要打印区分两个分支的日志,可直接用get方法实现同样逻辑:

# 不存在revokedTokens时默认返回空列表,追加新值后赋值回去
user["revokedTokens"] = user.get("revokedTokens", []) + ["another"]
# 替换为jwt的写法:user["revokedTokens"] = user.get("revokedTokens", []) + [jwt]

注意:上述代码仅修改了本地内存中的user字典,如果你需要将变更同步回MongoDB,还需要额外调用usersCollection.update_one()方法将修改写入数据库。

内容的提问来源于stack exchange,提问作者The Outstanding Question Asker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:04