2015-03-19 2 views
1

У меня есть простой 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) 
+0

Просто убедитесь, что вы определенно помещаете '$ and' и' $ elemMatch' в кавычки, не так ли? Благодарю. – alecxe

+0

Да, извините. Я вручную скопировал из своего словаря python, поэтому я пропустил их. Но они действительно существуют. Обновлено сейчас. – Brett

+0

Спасибо, ну, проверка работоспособности, вы уверены, что выполняете запросы по одной и той же базе данных? – alecxe

ответ

1

Эта линия вероятно, виновником.

collection = db.databases['race_results'] 

Если db - это ваша база данных, вы делаете это неправильно. Это должно быть

collection = db['race_results'] 
+0

, а попытка/catch вводит в заблуждение u в запросе. –

Смежные вопросы