查找字段存在或为空的文档
Posted
技术标签:
【中文标题】查找字段存在或为空的文档【英文标题】:Find document where field exist or is null 【发布时间】:2021-12-02 20:52:29 【问题描述】:我有一个这样的文档集合:
"...": ...
"validated_at": null
"archived_at": null
"..." : ...
我想查找所有validated_at
为null
且archived_at
为null
或文档中不存在的文档
我使用的是电机,所以我的查询有点不同,但目前我只过滤 validated_at
是 null
和 archive_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
]
【讨论】:
以上是关于查找字段存在或为空的文档的主要内容,如果未能解决你的问题,请参考以下文章