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 ответов


можно использовать $and чтобы присоединиться к нескольким условиям:

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

нет необходимости использовать $and и

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