Mongoengine:如何按ListEmbeddedDocumentField中的EmbeddedDocument字段进行过滤?

问题描述 投票:0回答:1

可能与this question有关,但没有答案。

我有一组相关的模型,并且根模型的复杂性已大大增加。大概,我的情况是这样的

from mongoengine import *

connect("test")


class NotSoComplex(EmbeddedDocument):
    name = StringField()
    value = StringField()


class Complex1(EmbeddedDocument):
    r1 = DictField()
    r2 = EmbeddedDocumentListField(NotSoComplex)    


class Complex2(EmbeddedDocument):
    ...


class VeryComplex(Document):
    r1 = EmbeddedDocumentField(Complex1)
    r2 = EmbeddedDocumentListField(Complex2)

    meta = {"allow_inheritance": False, "collection": "test"}  # , "indexes":["??"]}

我想基于value筛选VeryComplex文档,这些文档存储在EmbeddedDocumentListField中。我的意思是,我想过滤在r1.r2中具有值为==“ Foo”的某些文档的文档。我不知道如何在mongoengine过滤查询中表达这一点,我想要类似[]

print(VeryComplex.objects(r1__r2__contains__name =“ Foo”))

理想情况下,如果可能的话,我还要在该字段上创建索引并建立索引。

可能与此问题有关,但没有答案。我收集了它们之间相关的模型,并且根模型的复杂性大大增加了。大概,我的情况是...

python mongodb mongodb-query pymongo mongoengine
1个回答
0
投票

我不确定,但看来您可以使用聚合($ match和$ project)

© www.soinside.com 2019 - 2024. All rights reserved.