Есть ли способ получить данные с узла по событию child_added, используя облачную функцию firebase? - PullRequest
1 голос
/ 09 января 2020

Я использовал запрос «OnUpdate» для каждого клиента, чтобы получить данные из этого узла и вычислить количество детей, но это слишком дорого.

Поэтому я решил использовать облачную функцию и создать еще один узел подсчета детей на основе узла, в котором существуют все пользователи, но есть проблема, я не могу найти запрос типа "OnChildAdded ".

Доступные запросы, перечисленные в документации Firebase, это" OnUpdate "," OnDelete "," OnWrite "и" OnCreate ", которые бесполезны для этого случая, потому что использование" OnCreate "на дочернем узле не может вернуть мне детей родительского узла или «OnUpdate» на родительском узле снова станет дорогостоящим, потому что все пользователи часто обновляют свои состояния.

Так что насчет «OnOperation»? Можно ли его использовать или есть какой-то другой способ снизить стоимость запроса, а также создать узел подсчета детей?

Вот структура моей базы данных

{
 currentGame: {
  players: {
   playerId: {...playerGameData},
   //,
  },
  noOfPlayer: // this is what i wanted to create based on above players node children_count.
 }
}

1 Ответ

1 голос
/ 10 января 2020

Вот решение вышеуказанной проблемы на тот случай, если кому-то еще понадобится решить подобную проблему.

const PLAYER_REF = "currentGame/players/{playerId}";
const PLAYER_COUNT_NODE = "currentGame/noOfPlayers";

exports.incPlayersCount = functions.database.ref (PLAYER_REF).onCreate (async (snap) => 
{
    const countRef = snap.ref.root.child (PLAYER_COUNT_NODE);

    await countRef.transaction((current) => {
        return (typeof current !== "number" || current < 0) ? 1 : current + 1;
    });

    return null;
});

exports.decPlayersCount = functions.database.ref (PLAYER_REF).onDelete (async (snap) =>
{
    const countRef = snap.ref.root.child (PLAYER_COUNT_NODE);

    await countRef.transaction((current) => {
        return (typeof current !== "number" || current <= 0) ? 0 : current - 1;
    });

    return null;
});

btw - это в точности похоже на пример кода, которым @FrankvanPuffelen поделился в вышеприведенных комментариях .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...