Облачная функция Firebase делает запрос к базе данных - PullRequest
0 голосов
/ 24 июня 2018

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

Это структура моей базы данных реального времени

-- Buildings
  - BuildingID1
    - finalResult: 6.5
    - Reviews
      -ReviewID1
         - rate : 10
      -ReviewID2 
         - rate : 3
- BuildingID
    - finalResult: 1.5
    - Reviews
      -ReviewID
         - rate : 2
      -ReviewID 
         - rate : 1

.Таким образом, каждый раз, когда дочерний узел (т. е. обзор) добавляется / удаляется / обновляется. Я хочу проверить свойство показателя и суммировать его с остальным свойством оценки других обзоров, а затем разделить результат на количество узлов.... окончательный результат будет отображаться в новом свойстве finalResult.

Пока это моя функция, но я изо всех сил пытаюсь найти способ запроса базы данных, чтобы получить свойство grade издругие узлы.Не могли бы вы помочь мне?

export const schoolUpdated = functions.database.ref('/buildings/{buildingId}/reviews/{buildingId}/rate').onWrite( (change, context) => {

  const data = change.after.val();

 // ** calculate the result by querying the the reviews **/

return change.after.ref.parent.parent.parent.child('finalResult').set(result);

});

1 Ответ

0 голосов
/ 25 июня 2018

Пожалуйста, попробуйте следующую функцию и дайте мне знать:

export const schoolUpdated = functions.database.ref('/buildings/{buildingId}/reviews/{buildingId}/rate').onWrite( (change, context) => {
    return Promise.all([admin.database().ref(`/buildings/${context.params.buildingId}/reviews`).once('value')]).then(r => {
      const allReviews = r[0];
      let sumScore = 0;
      let count = 0;
      allReviews.forEach(item => {
        sumScore += item.child('rate').val();
        count = count + 1;
      });
      let result = (sumScore / count);
      return change.after.ref.parent.parent.parent.child('finalResult').set(result);
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...