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
相关产品推荐
相关产品推荐

