Abbastanza tardi per il gioco qui, ma FWIW, MongoEngine ha una soluzione integrata per questo.
Indipendentemente dal fatto che tu voglia create
o update
puoi fare quanto segue:
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()
Unica differenza per update
è necessario inserire un id
. In questo modo mongoengine non duplicherà un documento con un id
esistente e aggiornalo invece.