Sto modellando un database MongoBD in MongoEngine per un progetto Web. Voglio memorizzare i dati in un modo un po 'insolito per poterli interrogare in modo efficiente in seguito.MongoEngine: archiviazione di EmbeddedDocument in DictField
I nostri dati in MongoDB simile a questa:
// "outer"
{
"outer_data": "directors",
"embed": {
"some_md5_key": { "name": "P.T. Anderson" },
"another_md5_key": { "name": "T. Malick" },
...
}
}
Il mio primo istinto è stato quello di modellare in questo modo in 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
In altre parole, quello che in sostanza voglio è la stessa una memorizzazione di EmbeddedDocument in un ListField ma piuttosto in un DictField con chiavi dinamiche per ogni EmbeddedDocument.
Esempio che è consentito con un ListField per riferimento:
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))
io preferirei avere oggetti MongoEngine restituiti anche nidificati documenti "interiore", pur utilizzando un DictField + EmbeddedDocument (come dict " valore"). Come posso modellare questo in MongoEngine? È persino possibile o devo ingannare tutti i dati in un DictField generico?
Ho provato questo approccio ma durante il salvataggio mi dà "L'oggetto SON di origine deve essere di tipo 'dict'". Hai una soluzione per questo sarà molto utile. Grazie – ptwo