Tady je do hry docela pozdě, ale FWIW, MongoEngine má pro to vestavěné řešení.
Bez ohledu na to, zda chcete create
nebo update
můžete provést následující:
class Pets(EmbeddedDocument):
name = StringField()
class Person(Document):
name = StringField()
address = StringField()
pets = ListField(EmbeddedDocumentField(Pets))
p = Person(**{
"name": "Hank",
"address": "Far away",
"pets": [{"name": "Scooter"}]
})
p.save()
Jediný rozdíl pro update
musíte zadat id
. Tímto způsobem mongoengine nebude duplikovat dokument s existujícím id
a místo toho jej aktualizujte.