Редактировать несколько полей с mongoengine - PullRequest
0 голосов
/ 21 февраля 2019

Я реализую 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, если это возможно.

...