我希望在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"}]与保存顶级文档不同,其中文档的特定类的名称是DB中集合的名称。
我可以使BaseEmbedded成为一个DynamicEmbeddedDocument,为每个子类型添加一个具有适当值的“type”StringField,并基于类型字段重构list元素对象。
有没有更好的解决办法我没有想到?
发布于 2015-05-13 16:47:04
将JSON映射到类是Mongoengine所做的工作,也是嵌入式文档所支持的。您需要在嵌入文档的元中设置allow_inheritance=True。
https://stackoverflow.com/questions/30212006
复制相似问题