2016-02-18 1 views
0

У меня есть модель mongoalchemy:Как сделать запрос для записей, где значение двух полей совпадает в mongoalchemy?

class ImportProductReport(mongo.Document): 
    target = mongo.IntField(default=0) 
    processed = mongo.IntField(default=0) 
    is_in_process_remove_offers = mongo.BoolField(default=False) 
    is_old_offers_removed = mongo.BoolField(default=False) 
    ... 

мне нужно получить записи, где

  • ImportProductReport.is_in_process_remove_offers == false,

  • ImportProductReport.is_old_offers_removed == false,

  • ImportProductReport.target == ImportProductReport.processed.

Без последнего равного, все хорошо работают:

res = ImportProductReport.query\ 
    .filter(
     ImportProductReport.is_old_offers_removed == False, 
     ImportProductReport.is_in_process_remove_offers == False 
    )\ 
    .all() 

Но если я пытаюсь написать что-то вроде этого:

res = ImportProductReport.query\ 
    .filter(
     ImportProductReport.is_old_offers_removed == False, 
     ImportProductReport.is_in_process_remove_offers == False, 
     ImportProductReport.target == ImportProductReport.processed 
    )\ 
    .all() 

У меня есть ошибка:

AttributeError: 'bool' object has no attribute 'obj' 

Скажите, пожалуйста, как добавить это последнее условие в мой запрос у? :)

ответ

0

Если это кому-то поможет, я нашел ответ на свой вопрос. Mongoalchemy позволяет запросы с синтаксисом, аналогичные синтаксису оригинального MongoDB. Следовательно, запрос, который мне нужен, может быть записан следующим образом:

res = ImportProductReport.query\ 
    .filter({ 
     'is_old_offers_removed': False, 
     'is_in_process_remove_offers': False, 
     '$where': 'this.target == this.processed' 
    })\ 
    .all()