Uvažovali jste o použití PyMonga přímo namísto použití Mongoengine? Mongoengine je navržen tak, aby deklaroval a ověřoval schéma pro vaše dokumenty, a poskytuje k tomu mnoho nástrojů a vymožeností. Pokud se vaše dokumenty budou lišit, nejsem si jistý, zda je Mongoengine pro vás tou správnou volbou.
Pokud však máte některá pole ve všech dokumentech společná a každý dokument má určitou sadu polí specifických pro sebe, můžete použít DictField
Mongoengine. . Nevýhodou je, že klávesy nebudou "top-level", například:
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()
Výsledkem je dokument MongoDB jako:
{ _id: ObjectId(...),
_types: ["UserThings"],
_cls: "UserThings",
username: "dcrosta",
things: {
foo: "bar",
baz: "quack"
}
}
Upravit: Měl bych také poznamenat, že se pracuje na vývojové větvi Mongoengine pro "dynamické" dokumenty, kde budou atributy na instancích dokumentu Python uloženy při uložení modelu. Viz https://github.com/hmarr/mongoengine/pull/112 podrobnosti a historii.