一起使用Mapfield和DynamicEmbeddedDocument时发生InvalidDocumentError

时间:2019-06-13 11:22:39

标签: python mongodb mongoengine graphene-python

我有一个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库。

我需要一个正确的模型来支持此数据结构。

1 个答案:

答案 0 :(得分:0)

从我看到的结果来看,您不需要将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)