Как предотвратить запуск облачной функции для родительского узла после изменения поля в его дочернем узле? - PullRequest
0 голосов
/ 27 марта 2020

Моя база данных Firebase Realtime имеет следующую структуру:

-- Stock
   -- StoreId
      -- DepartmentId_1
         -- ProductId_1
            -- name: "productName"
            -- price: 1.0
      -- DepartmentId_2
         -- ProductId_X
            -- name: "productNameX"
            -- price: 1.0

Я хотел бы прочитать DepartmentId s, чтобы показать их в RecyclerView. Но Android Firebase Listener извлекает все данные, содержащиеся в StoreId.

. Я знаю, что могу использовать для l oop и получить ключи, но это не главное. Проблема заключается в количестве загруженных данных, которые могут взорвать мою квоту в Firebase.

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

-- Departments
   -- StoreId
      -- DepartmentId_1: true
      -- DepartmentId_2: true
      -- DepartmentId_3: true
      -- DepartmentId_4: true
              .
              .
              .

Я думал, что облачные функции будут запускаться только в указанном c узле, но оказалось, что если я изменю поле price, мой Cloud Function сработает.

Итак, мой вопрос: как запускать мою облачную функцию только при добавлении или удалении departmentId?

Ниже приведен мой первый шаг, так как выполнить l oop через departmentId s и записать их в Departments узел?

exports.createStoreDepartments = functions.database
.ref('Stock/{storeId}')
.onWrite((change,context) => {
  console.log('DATA CHANGED');
  return true;
});

Я ценю любую помощь!

1 Ответ

2 голосов
/ 27 марта 2020

Как вызвать мою облачную функцию только при добавлении или удалении departmentId?

Есть два способа сделать это:

  1. С двумя отдельными триггерами.

    exports.createStoreDepartments = functions.database
    .ref('Stock/{storeId}/{departmentId}')
    .onCreate((snapshot, context) => {
        ...
    

    и

    exports.createStoreDepartments = functions.database
    .ref('Stock/{storeId}/{departmentId}')
    .onDelete((snapshot, context) => {
        ...
    
  2. С одним onWrite триггером.

    exports.createStoreDepartments = functions.database
    .ref('Stock/{storeId}/{departmentId}')
    .onWrite((change,context) => {
        if (!change.before.exists()) {
          // TODO: this department was just created
        }
        if (!change.after.exists()) {
          // TODO: this department was just deleted
        }});
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...