我想查询一个mongo集合中的记录,这些记录要么没有一个名为“scheme”的字段的值,要么对于'scheme'明确地具有价值“http”。听起来很容易,但这个问题比起初看起来更加复杂。
由于
由于
db.collection.find({'scheme': None})
返回所有“scheme”未定义(没有索引字段)的记录,我最初认为以下内容会起作用:db.collection.find({'scheme': {'$in': ['http', None]}})
然而,这似乎排除了'scheme'未定义的值,因此我只能假设它在搜索'scheme'为'http'或明确定义为None
的记录。 这似乎有点违反直觉,但我们有了它。我的第二个尝试是:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
这也排除了方案未定义的结果。这一次,我甚至想不出为什么会失败的逻辑原因。
有任何想法为什么会失败以及如何实现预期效果吗?
谢谢
编辑:只是想指出,我是通过Python(pymongo)执行此查询,这解释了 None (而不是Javascript的
null )。