Dość późno w grze, ale FWIW, MongoEngine ma wbudowane rozwiązanie tego problemu.
Niezależnie od tego, czy chcesz create
lub update
możesz wykonać następujące czynności:
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()
Jedyna różnica dla update
czy musisz wkleić id
? . W ten sposób mongoengine nie zduplikuje dokumentu z istniejącym id
i zaktualizuj go.