Как мне подсчитать количество документов (onWrite) и сохранить счетчик по определенному пути с помощью облачных функций?

#firebase-realtime-database #google-cloud-functions

#firebase-realtime-database #google-cloud-функции

Вопрос:

С помощью моего кода я могу подсчитать количество документов в базе данных Firebase Realtime, но мне нужно, чтобы у них был счетчик для каждого groupId, который затем сохраняется в другом пути для каждого groupId.

Здесь указан путь к документам, которые я считаю

сообщения /{groupId}

Я хочу сохранить его здесь, каждый счетчик для своего groupId

итоговые сообщения / groupId

  exports.messageCounter = functions.database.ref('/messages/{groupId}').onWrite((change, context) => {
   const data = change.after.val();
   const group = data.groupId;
   const count = Object.keys(data).length;
      return admin.database().ref('totalmessages/' group).child('_count').set(count);
 });
  

В настоящее время код возвращает:

введите описание изображения здесь

также он перезаписывает «_Count» новыми данными и не создает несколько деревьев.

Комментарии:

1. Что делает ваш код сейчас, что работает не так, как вы ожидаете?

2. @DougStevenson пожалуйста, ознакомьтесь с обновленным вопросом.

3. Похоже, group не определено. Также в вашем вопросе говорится, что вы хотите выполнить запись на узел с именем «messageCounter», но ваш код записывает в «totalmessages». Чего вы действительно хотите здесь достичь?

4. @DougStevenson Что касается «messageCounter» и «totalmessages» — только что реализованный и отредактированный вопрос, код для этого правильный. Как я могу определить «Группу»?

Ответ №1:

Если вы пытаетесь получить подстановочный знак groupId при вызове вашей функции, вы захотите использовать контекст для этого:

 const group = context.params.groupId;
  

Смотрите документацию для получения более подробной информации.

Комментарии:

1. Большое спасибо! Отлично работает