我有一个集合,其中一些对象具有键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?
答案 0 :(得分:14)
您可以使用$and
加入多个条件:
collection.find({"$and": [{"foo": {'$ne': 'bar'}},
{"foo": {'$exists': True}}]})
答案 1 :(得分:12)
无需使用$and
,也可以使用
db.collection.find({"foo":{"$ne":"bar", "$exists":true}})