使用MongoAlchemy按内部列表值过滤

1 投票
1 回答
562 浏览
提问于 2025-04-18 17:01

我正在用 Flask 和 Flask-MongoAlchemy 搭建一个应用,但在写查询的时候遇到了一些麻烦。

我有一个 'Group' 文档的结构,如下所示:

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

我想写一个方法 Participant.groups(),这个方法会去数据库里查找所有的 Group 实例,条件是这些实例里有一个 participant_idself.id 匹配。

我在看 MongoAlchemy 的文档,但发现关于如何根据内部列表进行查询的信息很少。

在查看了这个 StackOverflow 的回答 这里 后,我尝试了

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

但可能不出所料,当它试图评估 participants.participant_id 时,抛出了一个错误。

有没有什么见解?我见过使用普通 MongoDB 语法的例子,但不知道如何用 MongoAlchemy 来实现这个。

谢谢!!

1 个回答

-1

太棒了!

在这种情况下,使用PyMongo的语法看起来是个不错的选择:

def groups(self):
    return Group.query.filter(
        {'participants': {'$elemMatch': {'participant_id': self.id}}}).all()

撰写回答