查找字段存在或为空的文档

Posted

技术标签:

【中文标题】查找字段存在或为空的文档【英文标题】:Find document where field exist or is null 【发布时间】:2021-12-02 20:52:29 【问题描述】:

我有一个这样的文档集合:


"...": ...
"validated_at": null
"archived_at": null
"..." : ...

我想查找所有validated_atnullarchived_atnull 或文档中不存在的文档

我使用的是电机,所以我的查询有点不同,但目前我只过滤 validated_atnullarchive_at 不存在的文档:

# "$type": 10 is for null bson value
await db.fdeses.find('validated_at': "$type": 10, 'archived_at': "$exists": False).to_list(CURSOR_LIMIT)

我尝试使用"$or",但它不起作用。

【问题讨论】:

MongoDB 手册 Query for Null or Missing Fields - 有关于使用 Motor 的说明。 我尝试了这个解决方案,确实效果很好,谢谢! 【参考方案1】:

考虑以下数据库结构。我添加了一个显示预期查询结果的字段。

这似乎返回了您正在寻找的内容。

您可以通过 Mongo Playground 查看a live demo here。

数据库

[
  
    "validated_at": null,
    "shouldBeReturned": true
  ,
  
    "validated_at": 2,
    "shouldBeReturned": false
  ,
  
    "validated_at": null,
    "archived_at": null,
    "shouldBeReturned": true
  ,
  
    "validated_at": 3,
    "shouldBeReturned": false
  ,
  
    "validated_at": 5,
    "archived_at": null,
    "shouldBeReturned": false
  
]

查询

db.collection.find(
  validated_at: null,
  archived_at: null
)

结果

[
  
    "_id": ObjectId("5a934e000102030405000000"),
    "shouldBeReturned": true,
    "validated_at": null
  ,
  
    "_id": ObjectId("5a934e000102030405000002"),
    "archived_at": null,
    "shouldBeReturned": true,
    "validated_at": null
  
]

【讨论】:

以上是关于查找字段存在或为空的文档的主要内容,如果未能解决你的问题,请参考以下文章

查找字段存在的所有文档:在 Elasticsearch 中它有一个值或为空

根据可以具有值或为空的字段选择组内的行

选择字段不存在、为空或为假的 MongoDB 文档?

查找数组字段不为空的 MongoDB 记录

查找数组字段不为空的 MongoDB 记录

查找数组字段不为空的 MongoDB 记录