MongoDB motor查询:如何筛选指定字段为null或不存在的文档
正确的查询实现
你可以选择以下两种写法实现需求:
写法1:利用MongoDB原生null匹配特性(最简洁)
MongoDB中直接将字段匹配None时,会自动命中「字段不存在」和「字段存在且值为null」两种场景,刚好符合你对archived_at的筛选要求,代码如下:
# "$type": 10 仅匹配validated_at存在且值为null的文档 # archived_at: None 匹配字段不存在 或 字段值为null的文档 await db.fdeses.find({ 'validated_at': {"$type": 10}, 'archived_at': None }).to_list(CURSOR_LIMIT)
写法2:显式用$or声明两种条件(语义更清晰)
如果你需要明确区分两种判断逻辑,也可以用$or写全两个条件,注意$or对应的是数组格式的条件列表:
await db.fdeses.find({ 'validated_at': {"$type": 10}, "$or": [ {'archived_at': {"$exists": False}}, {'archived_at': {"$type": 10}} ] }).to_list(CURSOR_LIMIT)
之前$or不生效大概率是层级写错,没有把两个archived_at的判断放到$or对应的数组里。
内容的提问来源于stack exchange,提问作者Howins
相关产品推荐
相关产品推荐

