Вы не можете передать несколько транзакций в вызов update()
, о котором пытается сообщить вам сообщение об ошибке (по общему признанию, несколько сбивающее с толку).
Firebase не имеет понятия вложенного, или пакетные транзакции. Если вам нужно выполнить транзакцию в нескольких местах, вам нужно будет выполнить ее как один transaction
вызов через узел, который находится над всеми этими местоположениями. Как вы, вероятно, можете догадаться, конкуренция за такую многопозиционную транзакцию очень скоро станет пределом пропускной способности, поэтому вам следует рассмотреть альтернативные решения.
«Самый простой» подход, который я могу придумать для вашего сценария использования - заменить две транзакции одним обновлением для нескольких местоположений, а затем использовать правила безопасности на стороне сервера для проверки операции.
Пример того, как сделать нечто подобное, см. в разделе мой ответ здесь: Безопасен ли способ быстрого запуска базы данных Firebase?
При таком подходе вы предотвращаете большую часть конфликтов, поскольку многопозиционное обновление не требует чтения проверьте-отправьте весь узел верхнего уровня, но только узлы нижнего уровня, которые вы обновляете.
Возможно, вам придется изменить свою структуру данных и, возможно, даже написать дополнительные данные, чтобы разрешить такой подход. Но взамен вы получите гораздо более масштабируемое обновление транзакций.