Mongoengine查询:获取name字段为null或不存在的用户文档
解决MongoEngine查询name为null或不存在的文档问题
嘿,我来帮你搞定这个查询问题!首先你遇到的NameError原因很明确——Python里没有null这个关键字,对应MongoDB的空值得用Python的None。但光改这个还不够,因为你需要同时匹配两种情况:name字段存在但值为null,或者name字段根本不存在,得把这两个条件用逻辑或组合起来才行。
下面给你两种可行的解决方案,按需选择:
方法一:使用原始MongoDB查询(raw)
直接写符合MongoDB语法的查询语句,注意用None代替null,并用$or组合两个条件:
Users.objects(__raw__={ '$or': [ {'name': None}, # 匹配name存在且值为null的文档 {'name': {'$exists': False}} # 匹配name字段不存在的文档 ] })
方法二:使用MongoEngine的Q对象查询(更推荐)
MongoEngine提供了更贴合Python风格的查询API,用Q对象来组合逻辑或条件,代码更易读也更易维护:
from mongoengine.queryset.visitor import Q # 用|表示逻辑或,组合两个查询条件 Users.objects(Q(name__exists=False) | Q(name=None))
额外说明
Q(name__exists=False):专门用来匹配不存在name字段的文档;Q(name=None):匹配name字段存在但值为null的文档;- 两种方法最终的查询效果完全一致,第二种方法更符合Django/MongoEngine的编码习惯,平时用它会更省心。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

