InvalidDocumentError при совместном использовании Mapfield и DynamicEmbeddedDocument - PullRequest
2 голосов
/ 13 июня 2019

У меня есть данные схемы монго:

{
"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 голосов
/ 13 июня 2019

Из того, что я вижу, вам не нужно оборачивать EmbeddedDocumentField в MapField's, попробуйте следующее:

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)
...