我想查询mongo集合中的记录,这些记录要么没有名为'scheme‘的字段的值,要么显式地具有'scheme’的值'http‘。听起来很简单,但事实证明这个问题比最初看起来要复杂得多。
由于db.collection.find({'scheme': None})
会返回所有未定义'scheme‘的记录(没有索引字段),所以我最初假设以下方法是可行的:
db.collection.find({'scheme': {'$in': ['http', None]}})
但是,这似乎排除了未定义“方案”的值,因此我只能假设它正在搜索方案为“http”或显式定义为None
的记录。这看起来有点违反直觉,但我们已经知道了。我的第二次尝试如下:
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
这也排除了未定义方案的结果。这一次,我甚至想不出一个逻辑原因为什么这是失败的。
你知道这是为什么失败的吗,以及我如何才能让它按预期工作?
谢谢
编辑:我想我应该注意到我是通过Python (pymongo)执行这个查询的,它解释了None
(通过Javascript的null
)
发布于 2011-01-05 23:45:50
解决:这显然是我的mongodb (1.4.4)版本的问题,这个问题在1.6.5中解决了。
https://stackoverflow.com/questions/4605799
复制相似问题