Bastante tarde para el juego aquí, pero FWIW, MongoEngine tiene una solución integrada para esto.
Independientemente de si desea create
o update
puedes hacer lo siguiente:
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()
Solo diferencia para update
es necesario pegar en un id
. De esa manera mongoengine no duplicará un documento con un id
existente y actualícelo en su lugar.