Sudahkah Anda mempertimbangkan untuk menggunakan PyMongo secara langsung daripada menggunakan Mongoengine? Mongoengine dirancang untuk mendeklarasikan dan memvalidasi skema untuk dokumen Anda, dan menyediakan banyak alat dan kemudahan untuk itu. Jika dokumen Anda akan bervariasi, saya tidak yakin Mongoengine adalah pilihan yang tepat untuk Anda.
Namun, jika Anda memiliki beberapa bidang yang sama di semua dokumen, dan kemudian setiap dokumen memiliki beberapa kumpulan bidang khusus untuk dirinya sendiri, Anda dapat menggunakan DictField
Mongoengine . Kelemahan dari ini adalah bahwa kunci tidak akan menjadi "tingkat atas", misalnya:
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()
Hasil dalam dokumen MongoDB seperti:
{ _id: ObjectId(...),
_types: ["UserThings"],
_cls: "UserThings",
username: "dcrosta",
things: {
foo: "bar",
baz: "quack"
}
}
Sunting: Saya juga harus mencatat, ada pekerjaan yang sedang berlangsung di cabang pengembangan Mongoengine untuk dokumen "dinamis", di mana atribut pada contoh dokumen Python akan disimpan ketika model disimpan. Lihat https://github.com/hmarr/mongoengine/pull/112 untuk detail dan sejarah.