Firebase实时数据库一次更新多个节点

时间:2019-10-23 23:25:18

标签: javascript firebase react-native firebase-realtime-database chat

我有一个聊天应用程序,想创建未读邮件的数量。如果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 个答案:

答案 0 :(得分:1)

要更新Firebase实时数据库中的值,您需要知道其完整路径。 Firebase数据库不支持更新查询,在此您将条件以及计算或值传递给服务器。

如果您要使用Cloud Firestore(属于Firebase的另一个数据库),则确实包括一个FieldValue.increment()操作,可以通过这种方式使用。

>

要在实时数据库上避免出现竞争状况的风险进行操作,您实际上需要run a transaction;在每个柜台上或在所有柜台上。