【问题标题】:Can I save and load a heterogenous list of polymorphic types in MongoEngine?我可以在 MongoEngine 中保存和加载多态类型的异构列表吗?
【发布时间】:2015-05-14 00:47:04
【问题描述】:

我想在 MongoEngine 中保存和加载多态类型的异构列表。 我最理想的样子是:

from mongoengine import Document, EmbeddedDocument, IntField, StringField
class BaseEmbedded(EmbeddedDocument):
    meta = {'abstract': True}
class FooEmbedded(BaseEmbedded):
    an_int = IntField()
class BarEmbedded(BaseEmbedded):
    a_string = StringField()
class HasList(Document):
    heterogeneous_list = ListField(EmbeddedDocumentField(BaseEmbedded))
has_list = HasList()
has_list.heterogeneous_list = [FooEmbedded(an_int=3), BarEmbedded(a_string='bar')]
has_list.save()
HasList.objects(id=has_list.id)

问题是当保存一个 EmbeddedDocument 时,它的特定多态类型丢失了,所以没有足够的数据来重建我原来的子类:

[{"an_int":3}, {"a_string":"bar"}]

与保存顶级文档时不同,其中文档的特定类的名称是数据库中集合的名称。

我可以将BaseEmbedded 设为DynamicEmbeddedDocument,为每个子类型添加一个带有适当值的“类型”StringField,并根据类型字段重构列表元素对象。

有没有更好的解决方案我没有想到?

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    将 JSON 映射到类是 Mongoengine 所做的,并且也支持嵌入文档。 您需要在嵌入文档的 meta 中设置 allow_inheritance=True。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2016-04-27
    • 1970-01-01
    • 2018-07-05
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多