sql 在 mongoengine 中查询

sql query in mongoengine

我有一个文档和一个嵌入文档,如下所示。我想查询mongoengine中的嵌入文档。在 sql 中,这将是:SELECT A.Nom_PC,B.Intitule 来自 Comptes as A,Vals as B WHERE B.Num = "some value"

class Vals(EmbeddedDocument):
    Num = StringField()
    Intitule = StringField()
    meta = {'allow_inheritance': True}

class Comptes(Document):
    Nom_PC = StringField()
    PC = ListField(EmbeddedDocumentField(Vals))
    meta = {'allow_inheritance': True}

我尝试了一些不起作用的方法,例如:

Comptes.objects(Vals__match={ "Num": Num }).aggregate(
       {'$project': {
           'PC': {
               '$filter': {
                   'input': '$PC',
                   'as': 'Vals',
                   'cond': {'$eq': ['$$Vals.Num', Num]}
               }
           }
       }}
   )

首先,你真的应该使用

PC = EmbeddedDocumentListField(Vals)

而不是

PC = ListField(EmbeddedDocumentField(Vals))

这是因为嵌入文档列表需要特殊考虑。

关于查询:

q = Comptes.objects(PC__Num="some value")

这将为所有匹配的 Comptes 文档创建一个查询。然后您可以从每个文档中挑选您想要的任何数据。

(如果将来您需要匹配 EmbeddedDocument 中的多个项目,请使用 match 关键字。有关详细信息,请参阅文档。)

例如:

my_list = []
for doc in q:
    for v in doc.PC:
        if v.Num == "some value":
            my_list.append([doc.Nom_PC, v.Intitule])

我制作的 YouTube 视频包含有关 EmbeddedDocumentListField 的更多详细信息:https://www.youtube.com/watch?v=ajwPOyb6VEU&index=6