Firebase-целевое поле документа Firestore с облачными функциями

при использовании облачных функций с базой данных Firebase в реальном времени вы можете нацелить определенное поле с облачной функцией. Например, учитывая эту структуру JSON, я мог бы нацелиться, когда поле электронной почты user1 изменилось с ('/user/{userId}/email').onUpdate функции облака.

{ "user": { "user1": { "name": "John Doe", "phone": "555-5555", "email": "john@gmail.com" } } }

теперь с Firestore кажется, что я не могу нацелиться на конкретное поле и могу нацеливать только документы. Если это так, функция Firestore cloud для таргетинга поля электронной почты должна выглядеть так это ('/user/{userId}').onUpdate, и огонь каждый раз, когда любой документ в user коллекция изменилась. Это приведет к тому, что многие функции облака будут запущены впустую. Это как Firestore работ и элегантно обойти его?

1 ответов


вы правы, из-за различных моделей данных Cloud Firestore позволяет запускать облачные функции только на событиях уровня документа, а не на уровне поля.

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

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