У меня есть простой MongoDB коллекцию, я доступ с помощью PyMongo
в моем Python сценария.PyMongo возвращает пустой результирующий набор, когда клиент MongoDB возвращает правильные результаты
Я фильтрование запрос в Python с использованием словаря:
{ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } }
]
}
И это возвращает правильные результаты. Тем не менее, я хотел бы расширить фильтр следующим образом:
{ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } },
{ "summary.dist" : "1" }
]
}
И это возвращает пустой набор результатов. Теперь, когда я делаю этот же запрос в моем клиента MongoDB с помощью:
db.race_results.find({ "$and" : [
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Jailhouse King" } } },
{ "bettinginterests" : { "$elemMatch" : { "runner.name" : "Tyrone Haji" } } },
{ "summary.dist": "1" }
]
})
Результаты возвращаются правильно, как и ожидалось.
Я не вижу никакой разницы между Python словаря передается в качестве фильтра запроса, а js
код выполняется на моем клиента MongoDB.
Кто-нибудь видит, где может быть разница? Я здесь в недоумении.
UPDATE:
Вот пример записи в моей БД: https://gist.github.com/brspurri/8cefcd20a7f995145a81
UPDATE 2: Python код для выполнения запроса:
runner = "Jailhouse King"
opponent = "Tyrone Haji"
query_filter = {"$and": [
{"bettinginterests": {"$elemMatch": {"runner.name": runner}}},
{"bettinginterests": {"$elemMatch": {"runner.name": opponent}}},
{ "summary.dist" : "1" }
]
}
try:
collection = db.databases['race_results']
entities = None
if not query_filter:
entities = collection.find().sort([("date", -1)])
else:
entities = collection.find(query_filter).sort([("date", -1)])
except BaseException, e:
print('An error occured in query: %s\n' % e)
Просто убедитесь, что вы определенно помещаете '$ and' и' $ elemMatch' в кавычки, не так ли? Благодарю. – alecxe
Да, извините. Я вручную скопировал из своего словаря python, поэтому я пропустил их. Но они действительно существуют. Обновлено сейчас. – Brett
Спасибо, ну, проверка работоспособности, вы уверены, что выполняете запросы по одной и той же базе данных? – alecxe