Trò chơi ở đây khá muộn, nhưng FWIW, MongoEngine có một giải pháp xây dựng cho điều này.
Bất kể bạn có muốn create hay không hoặc update bạn có thể làm như sau:
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()
Chỉ khác biệt đối với update bạn có cần nhập id không . Bằng cách đó mongoengine sẽ không sao chép tài liệu với id hiện có và cập nhật nó thay thế.