我想查询一个 mongo 集合中的记录,这些记录要么没有名为“scheme”的字段的值,要么明确地具有“scheme”的值“http”。听起来很简单,但事实证明这个问题比最初看起来要复杂得多。
由于db.collection.find({'scheme': None})
返回未定义“方案”的所有记录(无索引字段),我最初假设以下方法可行:
db.collection.find({'scheme': {'$in': ['http', None]}})
但是,这似乎排除了未定义“方案”的值,因此我只能假设它正在搜索方案为“http”或明确定义为的记录None
。这似乎有点违反直觉,但我们有它。我的第二次尝试如下:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
这也排除了未定义方案的结果。这一次,我什至想不出失败的合理原因。
任何想法为什么会失败,以及如何让它按需要工作?
谢谢
编辑:只是想我会注意到我正在通过 Python (pymongo) 执行此查询,这解释了None
(over Javascript's null
)