Modeluję bazę danych MongoBD w MongoEngine dla projektu internetowego. Chcę przechowywać dane w nieco nietypowy sposób, aby móc później wydajnie je wysłać.MongoEngine: przechowywanie EmbeddedDocument w DictField
Nasze dane MongoDB wygląda mniej więcej tak:
// "outer"
{
"outer_data": "directors",
"embed": {
"some_md5_key": { "name": "P.T. Anderson" },
"another_md5_key": { "name": "T. Malick" },
...
}
}
Moim pierwszym odruchem było modelować to tak w MongoEngine:
class Inner(EmbeddedDocument):
name = StringField()
class Outer(Document):
outer_data = StringField()
embed = DictField(EmbeddedDocument(Inner)) # this isn't allowed but you get the point
Innymi słowy, to, co w istocie chcą to samo przechowywanie elementu EmbeddedDocument w polu ListField, ale raczej w DictField z dynamicznymi kluczami dla każdego obiektu EmbeddedDocument.
Przykład że pozostawia z ListField odsyłające:
class Inner(EmbeddedDocument):
inner_id = StringField(unique=True) # this replaces the dict keys
name = StringField()
class Outer(Document):
outer_data = StringField()
embed = ListField(EmbeddedDocument(Inner))
że wolą mieć obiektów MongoEngine powrócił do zagnieżdżone „wewnętrzny” dokumenty jednocześnie stosując DictField + EmbeddedDocument (jak dict " wartość"). Jak mogę to modelować w MongoEngine? Czy to jest nawet możliwe, czy muszę naiwnie umieszczać wszystkie dane w generycznym DictField?
Próbowałem tego podejścia, ale podczas zapisywania daje mi "Źródłowy obiekt SON musi być typu" dict "". Czy masz rozwiązanie tego, będzie bardzo pomocne. Dzięki – ptwo