【问题标题】:MongoDB query: field either does not exist or has specific valueMongoDB 查询:字段不存在或具有特定值
【发布时间】:2011-06-04 02:19:43
【问题描述】:

我想查询一个 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(通过 Javascript 的 null

【问题讨论】:

  • 您的代码拯救了我的一天。谢谢。
  • 我遵循了不同的答案,但没有一个有效。这对我有用。非常感谢。

标签: mongodb pymongo


【解决方案1】:

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

【讨论】:

  • 那么哪个是工作版本?第二个带有 $or 或第一个?谢谢
  • 对不起,才注意到这一点(很晚!)答案实际上是两者兼而有之。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多