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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:36