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

Другими словами, я пытаюсь выяснить, что эквивалентно Firestore в SQL:

UPDATE table SET field = 'foo' WHERE <condition>'

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

db.collection('table')
  .where(...condition...)
  .update({
    field: 'foo',
  });

- это то, что я ожидал, CollectionReference не имеет метода .update.

В документации "Транзакции и пакетные записи" упоминаются транзакции и пакетные записи. Транзакции завершены, потому что "Транзакция состоит из любого числа операций get(), за которыми следует любое количество операций записи" Пакетные записи также не являются решением, так как они работают документ за документ.

С MongoDB это будет

db.table.update(
  { /* where clause */ },
  { $set: { field: 'foo' } }
)

Итак, может ли Firestore обновить несколько документов одним запросом, как работает база данных SQL или MongoDB, т.е. не требуется двусторонняя передача к клиенту для каждого документа? Если нет, то как это можно сделать эффективно?

Ответ 1

Обновление документа в Cloud Firestore требует знания его идентификатора. Облачное хранилище пожаров не поддерживает эквивалент запросов на обновление SQL.

Вы всегда должны будете сделать это в два этапа:

  1. Запустите запрос с вашими условиями, чтобы определить идентификаторы документов
  2. Обновляйте документы с помощью отдельных обновлений или одной или нескольких периодических записей.

Обратите внимание, что вам нужен только идентификатор документа из шага 1. Таким образом, вы можете выполнить запрос, который возвращает только идентификаторы. Это невозможно в клиентских SDK, но это можно сделать с помощью API REST и административных SDK, как показано здесь: Как получить список идентификаторов документов в коллекции Cloud Firestore?