Обновление базы данных Firebase в реальном времени одновременно несколькими узлами - PullRequest
1 голос
/ 24 октября 2019

У меня есть приложение чата, и я хочу создать количество непрочитанных сообщений. По сути, что-то вроде этого, если user1 должен был отправлять сообщение.

Есть ли какой-то способ перебрать всех пользователей для обновления, имея функцию, как показано ниже. Я думаю, что мог бы быть какой-то способ отобразить всех пользователей и вместо этого вызвать обновление для каждого конкретного пользователя, но, похоже, не могу определить лучший подход

ref.child("Public").child("ChannelName").update({
  user1: 0,
  user2: old unread messages + 1,
  user3: old unread messages + 1,
  user4: old unread messages + 1
});

В настоящее время используется:

UNREAD_MESSAGES.once("value")
      .then(snapshot => {
        snapshot.forEach(user => {
          let userKey = user.key;
          let userVal = user.val();
          // update unread messages count
          if (userKey !== currentUserID) {
            UNREAD_MESSAGES.update({
              [userKey]: userVal + 1
            });
          } else {
            UNREAD_MESSAGES.update({
              [userKey]: 0
            });
          }
        }
        )
      })

1 Ответ

1 голос
/ 24 октября 2019

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

Если вы используете Cloud Firestore (другую базу данных, которая является частью Firebase), то включает включает в себя операцию FieldValue.increment(), которую можно использовать таким образом.

Чтобы выполнить свою работу без риска возникновения гонки в Базе данных реального времени, вам действительно нужно выполнить транзакцию ;либо на каждом счетчике, либо на всех счетчиках.

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