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

Chr*_*ian 7 python querying mongodb pymongo

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

collection.find({'foo': {'$exists': True}, 'foo': {'$ne': 'bar'}})
Run Code Online (Sandbox Code Playgroud)

我认为这两个标准都是通过逻辑AND连接的.但是,我也得到了没有特征键的对象foo.事实上,当我使用查询时,我得到相同的结果

collection.find({'foo': {'$ne': 'bar'}})
Run Code Online (Sandbox Code Playgroud)

在其他汉斯,如果我使用

collection.find({'foo': {'$exists': True}})
Run Code Online (Sandbox Code Playgroud)

我只是正确地获取了foo所有对象,所以其中一些具有价值bar.

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

ale*_*cxe 15

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

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

  • 一般用途的较短版本 `{"$and": [{"key1": value1}, {"key2": value2}]}` (4认同)

And*_*nyi 13

没有必要使用$and,它也有效

db.collection.find({"foo":{"$ne":"bar", "$exists":true}})
Run Code Online (Sandbox Code Playgroud)