Как пропустить обновление, если одно из полей в документе изменилось? Cloud Firestore - PullRequest
0 голосов
/ 11 октября 2019

При наличии документа Firebase:

{ a: "hello", b: False}

Когда я делаю запрос: update {b = True}, но только если {a == "hello"}

А между тем, для а установлено значение "world".

Я ожидаю, что документ должен остаться таким: {a: "world", b: False} Но я вижу вот что: {a: "world", b: True}

Можно ли вообще отбросить запрос на обновление Cloud Firestore для документа, если документ был изменен за это время?

1 Ответ

0 голосов
/ 16 октября 2019

Я решил не проверять одно поле, а проверить, изменился ли за это время весь документ, а затем прервать действие обновления.

из google.api_core.exceptions import FailedPrecondition

[...]
    doc_ref = self.client.collection(path).document(id)
    snapshot = doc_ref.get()

    if snapshot.exists:
        if snapshot.get("a") == "hello":
            write_option = self.client.write_option(
                last_update_time=snapshot.update_time
            )
            try:
                doc_ref.update({"b": True}, option=write_option)
            except FailedPrecondition:
                # here you can try again as the document has updated in the meanwhile, so `a` could no longer be "hello"
 [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...