Фильтрация по значению внутреннего списка с использованием MongoAlchemy

Я создаю приложение Flask с Flask-MongoAlchemy, и у меня возникают проблемы при составлении запроса.

У меня есть следующая структура документа для документа "Группа":

{'name': 'some_name',
 'participants': [
     {'participant_id': 12345}
     {'participant_id': 98765}
     ]
}

Я пытаюсь написать метод Participant.groups(), который делает вызов в базу данных, чтобы вернуть все экземпляры группы, где есть participant_id который соответствует self.id,

Однако я читаю документы MongoAlchemy и нахожу очень мало о том, как делать запросы на основе внутреннего списка.

Посмотрев на SO ответ здесь, я попытался

def groups(self):
    return Group.query.filter(Group.participants.participant_id == self.id)

Но, возможно, неудивительно, что он выдает ошибку, когда пытается participants.participant_id,

Любое понимание? Я видел примеры использования обычного синтаксиса MongoDB, но затрудняюсь понять, как этого добиться, используя MongoAlchemy.

Спасибо!!

1 ответ

Решение

Огромный успех!

Переход к синтаксису PyMongo в данном случае выглядит так:

def groups(self):
    return Group.query.filter(
        {'participants': {'$elemMatch': {'participant_id': self.id}}}).all()
Другие вопросы по тегам