我想查询一个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
)
答案 0 :(得分:8)
已解决:这显然是我的mongodb版本(1.4.4)的问题,问题在1.6.5中得到解决。