Hai considerato l'utilizzo diretto di PyMongo invece di utilizzare Mongoengine? Mongoengine è progettato per dichiarare e convalidare uno schema per i tuoi documenti e fornisce molti strumenti e comodità al riguardo. Se i tuoi documenti cambieranno, non sono sicuro che Mongoengine sia la scelta giusta per te.
Se, tuttavia, hai dei campi in comune a tutti i documenti e quindi ogni documento ha una serie di campi specifici per se stesso, puoi utilizzare DictField
di Mongoengine . Lo svantaggio di questo è che le chiavi non saranno di "livello superiore", ad esempio:
class UserThings(Document):
# you can look this document up by username
username = StringField()
# you can store whatever you want here
things = DictField()
dcrosta_things = UserThings(username='dcrosta')
dcrosta_things.things['foo'] = 'bar'
dcrosta_things.things['bad'] = 'quack'
dcrosta_things.save()
Risulta in un documento MongoDB come:
{ _id: ObjectId(...),
_types: ["UserThings"],
_cls: "UserThings",
username: "dcrosta",
things: {
foo: "bar",
baz: "quack"
}
}
Modifica: Dovrei anche notare che sono in corso lavori sul ramo di sviluppo di Mongoengine per documenti "dinamici", in cui gli attributi sulle istanze del documento Python verranno salvati quando il modello viene salvato. Vedi https://github.com/hmarr/mongoengine/pull/112 per i dettagli e la cronologia.