Данные My Firestore структурированы примерно так:
/ races / {raceID} / {distance: value, members: [runnerID, runnerID]}
и / runners / {runnerID } / {totalDistance: value}
Я хочу поддерживать актуальность поля totalDistance каждого бегуна, суммируя поля расстояний для всех гонок, в которых они участвуют.
У меня есть функция, запускаемая для документа гонки onWrite, которая выполняет следующие действия:
- Проверяет, есть ли в документе гонки данные
- Проверяет, есть ли в документе гонки участников
- Получить идентификаторы участников, которых нет в как до, так и после снимков и добавить их в массив
- Если расстояние между снимками до и после изменилось, получите все идентификаторы участников в снимке после и добавьте их в тот же массив
- Выведите массив
- Для каждого идентификатора в массиве:
- Запросите коллекцию 'race', используя where ('members', 'array_contains', id), чтобы получить все расы, в которых участвует бегун. участие
- Обходите массив гонок, чтобы суммировать значения «дистанции».
- Обновите поле «totalDistance» в документе с идентификатором бегуна.
Я обеспокоен тем, что это станет дорогостоящим, когда и количество участников на гонку, и количество гонок на бегуна со временем увеличатся. 1034 * К вашему сведению - причина, по которой я каждый раз пересчитываю общую сумму, заключается в том, что в случае, если в какой-то момент произошла ошибка, я не хочу просто увеличивать / уменьшать общую сумму и сохранять эту ошибку навсегда.