MongoDB / PyMongo:查询多个条件 - 意外结果

时间:2014-05-10 04:43:04

标签: python mongodb pymongo querying

我有一个集合,其中一些对象具有键foo。我现在尝试查询确实具有此密钥但不具有特定值bar的所有对象。为此,我使用以下查询:

collection.find({'foo': {'$exists': True}, 'foo': {'$ne': 'bar'}})

我认为两个标准都是通过逻辑AND连接的。但是,我也得到了不具有键foo功能的对象。事实上,当我使用查询

时,我得到相同的结果
collection.find({'foo': {'$ne': 'bar'}})

在其他汉斯,如果我使用

collection.find({'foo': {'$exists': True}})

我正确地只使用foo获取对象,但显然是所有对象,因此其中一些具有值bar

如何制定查询以实现初步结果?是否有一种测试多个标准的顺序?我是否明确指定了两个标准的逻辑AND?

2 个答案:

答案 0 :(得分:14)

您可以使用$and加入多个条件:

collection.find({"$and": [{"foo": {'$ne': 'bar'}}, 
                          {"foo": {'$exists': True}}]})

答案 1 :(得分:12)

无需使用$and,也可以使用

db.collection.find({"foo":{"$ne":"bar", "$exists":true}})