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
我有一个文档和一个嵌入文档,如下所示。我想查询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