Я реализую REST API на основе mongodb и mongoengine.Предоставляемый ресурс имеет следующую структуру:
class Civil(EmbeddedDocument):
first_name = StringField()
last_name = StringField()
email = StringField(unique=True)
phone_number = StringField()
birthday = DateTimeField()
address = EmbeddedDocumentField(Address)
class Candidate(Document):
registration_date = DateTimeField(default=datetime.now())
last_update = DateTimeField(default=datetime.now())
civil = EmbeddedDocumentField(Civil)
API предоставляет маршрут PUT, позволяющий редактировать элементы в базе, и этот маршрут используется для обновления любого указанного поля (civil.email, last_update)полезная нагрузка, предоставляемая контроллером.Например, если полезная нагрузка равна {'civil': {'email': 'new_email'} }
, обновляется только электронная почта вложенного поля.
Я использовал функцию обновления, однако в случае вложенных полей все остальные поля устанавливаются на Нет.(В моем примере, после вызова update, last_name становится None)
Один из вариантов, который у меня есть, - это использовать pymongo и update_one, используя {"$ set": payload}.Но я бы предпочел использовать решение, основанное только на mongoengine, если это возможно.