Har du overvejet at bruge PyMongo direkte i stedet for at bruge Mongoengine? Mongoengine er designet til at erklære og validere et skema for dine dokumenter, og giver mange værktøjer og bekvemmeligheder omkring det. Hvis dine dokumenter kommer til at variere, er jeg ikke sikker på, at Mongoengine er det rigtige valg for dig.
Hvis du derimod har nogle felter til fælles på tværs af alle dokumenter, og hvert dokument har et sæt felter, der er specifikke for sig selv, kan du bruge Mongoengines DictField
. Ulempen ved dette er, at tasterne ikke vil være "top-niveau", for eksempel:
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()
Resulterer i et MongoDB-dokument som:
{ _id: ObjectId(...),
_types: ["UserThings"],
_cls: "UserThings",
username: "dcrosta",
things: {
foo: "bar",
baz: "quack"
}
}
Rediger: Jeg skal også bemærke, at der er arbejde i gang med udviklingsgrenen af Mongoengine til "dynamiske" dokumenter, hvor attributter på Python-dokumentinstanserne vil blive gemt, når modellen gemmes. Se https://github.com/hmarr/mongoengine/pull/112 for detaljer og historie.