В основном у меня есть почтовый документ и Comment
EmbeddedDocument
следующим образом:
class Comment(EmbeddedDocument):
value1 = StringField(max_length=200,)
value2 = StringField(max_length=200,)
value3 = StringField(max_length=200,)
id = UUIDField(required=True, primary_key=True)
class Post(Document,):
comments = EmbeddedDocumentListField(Comment, required=False)
PUT
запрос может обновить любую комбинацию значений1, значений2 и значений3 для данного комментария к данному сообщению. Я использую метод queryset update
, чтобы сделать это следующим образом:
post = Post.objects.get(id=post_id)
comment = None
for comm in post.comments:
if comm.id == comment_id:
comment = comm
Post.objects(
id=post_id,
comments__id=comment_id
).update(
set__comments__S__value1=new_value1 or comment.value1,
set__comments__S__value2=new_value2 or comment.value2,
set__comments__S__value3=new_value3 or comment.value3,
)
Но это явно не Чтение-изменение-запись атомарная операция. Настолько горячее чтение-изменение-запись как одна атомарная операция?