MongoDB查询:字段不存在或具有特定值

21
我想查询一个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 )。


1
你的代码拯救了我的一天。谢谢。 - Chinni
我曾经尝试了不同的答案,但都没有起作用。这个方法对我很有帮助。非常感谢。 - Damodar Bashyal
1个回答

8

已解决:这显然是我的mongodb版本(1.4.4)的问题,在1.6.5中问题得到了解决。


那么哪个是可用版本?第二个带有$or的还是第一个?谢谢。 - Matroska
抱歉,我刚注意到这个问题(非常晚了!)答案实际上是两者都可以。 - majackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接