PyMongo не может получить $и + $или работать

3 Maximas [2014-12-09 11:26:00]

Я использую python 3, mongo version 2.6.4 и pymongo версии 2.7. Я не могу получить следующий запрос для работы... Этот запрос - это то, что я положил прямо в оболочку mongo:

db.zoo.find({'animal': {'$and': [{'$ne': 'dog'}, {'$ne': 'cat'}]}}).limit(20).pretty()

(Предел и симпатичный только там, пока я тестирую)
Это ошибка, которую я получаю:

error: {
    "$err" : "Can't canonicalize query: BadValue unknown operator: $and",
    "code" : 17287
}

Я получаю ту же ошибку, когда я использую оператор $или:

error: {
    "$err" : "Can't canonicalize query: BadValue unknown operator: $or",
    "code" : 17287
}

Я нашел Джиру, которая была поднята, но я не был уверен, связано ли это с той же проблемой https://jira.mongodb.org/browse/SERVER-12981

Я пробовал все комбинации, о которых я могу думать, но я не могу решить эту проблему.

Спасибо заранее.

ИЗМЕНИТЬ: Я делал попытку $nin, но ничего не возвращал. Несмотря на то, что это запрос оболочки Mongo, я не могу заставить его работать в PyMongo, и я получаю ту же ошибку

python-3.x mongodb pymongo


1 ответ


4 Решение Jehof [2014-12-09 12:04:00]

В этом случае вы можете использовать implicit and. Следующий запрос должен работать

db.zoo.find({'animal': {$ne: 'dog', $ne: 'cat'}})

чтобы сделать and explicit, вы можете написать

db.zoo.find({$and: [{'animal': {$ne: 'dog'}},{'animal': {$ne: 'cat'}}]})