Обновить поле, если в mongoengine пусто - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно обновить поле документа, если оно имеет значение None, но я не хочу перезаписывать его, если у такого поля есть значение.

Сейчас я делаю следующее:

p = Person.objects(name="Foo").first()
if p.address is None:
    p.update(set__address="Bar Street, NY")

но это не атомарная операция.

Я хотел бы сделать что-то вроде:

Person.objects(name="Foo").update_one(set__address_if_none="Bar Street, NY")

, но я не могу найтичто-нибудь об этом в сети.

Есть ли что-нибудь подобное или другой способ, которым я мог бы достичь этого?

1 Ответ

1 голос
/ 12 апреля 2019

Как то так?

Person.objects(name="Foo", address=None).update(set__address="Bar Street, NY")

Хотя, насколько мне известно, не является атомным. Я имею в виду, что это атомарно в одном документе, но не в коллекции. Чтобы быть по-настоящему атомарным, вам понадобится транзакция, которую Mongo, похоже, теперь поддерживает .

...