我想在mongo集合中查询名为"scheme"的字段没有值或"scheme"显式有值"http"的记录.听起来很简单,但事实证明,这个问题比最初看起来更复杂.

由于db.collection.find({'scheme': None})返回"scheme"未定义(没有索引字段)的所有记录,我最初认为以下方法可行:

db.collection.find({'scheme': {'$in': ['http', None]}})

然而,这似乎排除了"scheme"未定义的值,因此我只能假设它正在搜索scheme为"http"或显式定义为None的记录.这似乎有点违反直觉,但我们已经做到了.我的第二次try 是:

db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})

这也排除了方案未定义的结果.这一次,我甚至想不出这个失败的逻辑原因.

你知道为什么会失败吗?我怎样才能让它按预期工作?

谢谢

编辑:我想我会注意到我是通过Python(pymongo)执行这个查询的,这解释了None(而不是Javascript的null)

推荐答案

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

Mongodb相关问答推荐

如何从MongoDB集合中获取第一个和最后一个元素?

无法在Ubuntu 22.04上安装MongoDB 7.0

如何用Python和MongoDB找到单据字段的最大值?

所有文档中嵌套 struct 中的条件匹配-mongodb

为什么 mongoose 在 mongodb 中找不到我的数据

MongoDB:检测所有重叠事件(开始/结束日期)?

MongoDB 根据最新日期查询多个不同的值

对对象数组进行分组并在 mongodb 中获取计数

如何使用指南针连接到 mongodb replicaset (k8s)

Mongo C#忽略属性

MongoDB:按标签获取文档

MongoDB展开多个数组

如何在我的Meteor 应用程序数据库中使用 mongoimport?

MongoDB Java API:put() 与 append()

MongoDB 日志(log)文件和 oplog 有何不同?

将新值推送到 mongodb 内部数组 - mongodb/php

如何在 Ubuntu 10.04 中使用 --auth 选项重新启动 mongodb?

MongoDB InsertMany 与 BulkWrite

Meteor 发布/订阅独特客户端集合的策略

开发人员必须采取哪些mental steps才能开始从 SQL 迁移到 NOSQL(CouchDB、Fathom DB、MongoDB 等)?