Мне нужно обновить поле документа, если такое поле 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")
но я не могу найти ничего об этом в Интернете.
Есть ли что-нибудь подобное или по-другому, как я мог бы достичь этого?
Что-то вроде этого?
Person.objects(name = "Foo", address=None).update(set__address = "Bar Street, NY")
Хотя насколько я знаю этот не является тоже атомарный. Я имею в виду, что это атомарно для одного документа, но не для коллекции. Чтобы быть по-настоящему атомарным, вам понадобится транзакция, которая Mongo, кажется, поддерживает сейчас.
Да, мне нужно, чтобы он был атомарным в коллекции. Тогда я буду использовать транзакции.