Heeft u overwogen om PyMongo rechtstreeks te gebruiken in plaats van Mongoengine? Mongoengine is ontworpen om een schema voor uw documenten te declareren en te valideren en biedt daarom veel tools en gemakken. Als uw documenten gaan verschillen, weet ik niet zeker of Mongoengine de juiste keuze voor u is.
Als u echter enkele velden gemeenschappelijk heeft in alle documenten, en elk document heeft een aantal velden die specifiek zijn voor zichzelf, dan kunt u Mongoengine's DictField
gebruiken . Het nadeel hiervan is dat de toetsen niet "top-level" zijn, bijvoorbeeld:
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()
Resultaten in een MongoDB-document zoals:
{ _id: ObjectId(...),
_types: ["UserThings"],
_cls: "UserThings",
username: "dcrosta",
things: {
foo: "bar",
baz: "quack"
}
}
Bewerken: Ik moet ook opmerken dat er gewerkt wordt aan de ontwikkelingstak van Mongoengine voor "dynamische" documenten, waar attributen op de Python-documentinstanties worden opgeslagen wanneer het model wordt opgeslagen. Zie https://github.com/hmarr/mongoengine/pull/112 voor details en geschiedenis.