MongoDB/PyMongo: 查询多个条件 - 意外结果
我有一组对象,其中一些对象有一个叫做 foo
的键。现在我想查询所有确实有这个键的对象,但不想要值为 bar
的那些。为此,我使用了以下查询:
collection.find({'foo': {'$exists': True}, 'foo': {'$ne': 'bar'}})
我以为这两个条件是通过逻辑“与”连接的。但是,我也得到了那些没有 foo
键的对象。实际上,当我只使用这个查询时:
collection.find({'foo': {'$ne': 'bar'}})
我得到的结果是一样的。
另一方面,如果我使用:
collection.find({'foo': {'$exists': True}})
我确实只得到了有 foo
的对象,但显然所有的对象中,有些的值是 bar
。
我该如何调整我的查询才能得到我最初想要的结果?多个条件是按照什么顺序进行测试的吗?我需要明确指定这两个条件之间的逻辑“与”吗?
2 个回答
20
其实不需要使用 $and
,这样也能正常工作。
db.collection.find({"foo":{"$ne":"bar", "$exists":true}})
42
你可以使用 $and
来连接多个条件:
collection.find({"$and": [{"foo": {'$ne': 'bar'}},
{"foo": {'$exists': True}}]})