我有一个 mongo 模式数据:
{
"key_1":{"internal_k1":"internal_v1","internal_k2":"internal_v2"},
"key_2":{"internal_k3":"internal_v3","internal_k4":"internal_v4"},
}
和一个 mongoengine 模型:
class ONE(DynamicEmbeddedDocument):
internal_k1 = StringField()
internal_k2 = StringField()
class TWO(DynamicEmbeddedDocument):
internal_k3 = StringField()
internal_k4 = StringField()
class Test(Document):
key_1 = MapField(EmbeddedDocumentField(ONE))
key_2 = MapField(EmbeddedDocumentField(TWO))
我包含了 DynamicEmbeddedDocument,因为 key_1 和 key_2 可以有额外的动态字段。
我正在手动插入数据: 使用模型加载数据时会抛出如下错误
mongoengine.errors.InvalidDocumentError:创建 Test
实例的无效数据。
我正在使用 mongoengine 作为 python 库。
我需要一个正确的模型来支持这个数据结构。
最佳答案
据我所知,您不需要将 EmbeddedDocumentField 包装在 MapField 中,请尝试以下操作:
class ONE(DynamicEmbeddedDocument):
internal_k1 = StringField()
internal_k2 = StringField()
class TWO(DynamicEmbeddedDocument):
internal_k3 = StringField()
internal_k4 = StringField()
class Test(Document):
key_1 = EmbeddedDocumentField(ONE)
key_2 = EmbeddedDocumentField(TWO)
关于python - 一起使用 Mapfield 和 DynamicEmbeddedDocument 时出现 InvalidDocumentError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579345/