Редактирование документа на основе результата запроса в транзакции Firestore - PullRequest
1 голос
/ 18 марта 2019

В настоящее время я делаю проект для базы данных Firestore с Android SDK.Мне нужно написать Транзакцию, в которой я хочу редактировать документ «destination» в коллекции «destination», только если в другой коллекции с именем «batches» нет документа с именем поля «destionId», установленным для документа назначения для редактированияЯ БЫ.Я проверяю это с помощью запроса .limit (1), установленного

Теперь я хочу сделать это в транзакции, так как это приложение работает в режиме реального времени и будет использоваться многими людьми одновременно.Если я не использовал транзакцию, то возможно, что другой человек может добавить «пакетный» документ с этим destinationId прямо между моим запросом для проверки и фактическим редактированием целевого документа.Итак, я хочу запускать запрос и проверять сбор пакетов каждый раз, когда транзакция повторяется.

Но я не уверен, как выполнить запрос Firestore внутри транзакции как его асинхронный.Я считаю, что в Android SDK нет способа сделать запрос на блокировку запроса.Пожалуйста, исправьте меня, если ошибаетесь.

Может кто-нибудь помочь мне с идеей, как решить этот конфликт?Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Вы не можете выполнить запрос внутри транзакции или сделать транзакцию зависимой от неизменного набора результатов запроса.Вы можете получать отдельные документы только по их идентификатору, чтобы изменить их позже в этой транзакции.

1 голос
/ 02 июля 2019

В случае, если это полезно для других, выполнение транзакции, которая работает с результатом запроса , возможно через SDK администратора (в отличие от SDK на стороне клиента Java). Проверьте документ по этому здесь .

Получить документ или результат запроса из базы данных. Держит пессимистическую блокировку всех возвращенных документов.

Эта возможность также упоминается в сообщении SO здесь . Обратите внимание, что в соответствующем клиентском JS SDK doc аргумент функции get принимает только documentRef.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...