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

У меня есть модель для монгоалхимии:

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'

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

1 ответ

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

res = ImportProductReport.query\
    .filter({
        'is_old_offers_removed': False,
        'is_in_process_remove_offers': False,
        '$where': 'this.target == this.processed'
    })\
    .all()
Другие вопросы по тегам