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

14 投票
2 回答
30956 浏览
提问于 2025-04-18 06:04

我有一组对象,其中一些对象有一个叫做 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}}]})

撰写回答