使用Node.js作为管理员在Firebase中进行多个更新

时间:2018-09-06 23:20:51

标签: firebase firebase-realtime-database google-cloud-functions

我的应用程序中有一个用户集合,现在,我们正在创建一个黑名单(阻止的用户列表)。这是新的收藏

BlackListByUser
  |
  |
  -- userIdBlackListOwber
         |
         |
         -- userIdBlocked
               |
                - name: "Suad"
                - username: "supersuad"
                - photo: "http://firebase......"
                - status: "S5"

通过Firebase函数,我可以检测到这些(用户集合)元素中的用户更改,并且无论哪个用户列表中有黑名单,我都必须更新所有黑名单。

exports.UpdateUserFromBlackList = functions.database.ref(`/User/{userId}`).onUpdate(event =>{
  ...
  db.ref(`BlackListByUser`).once('value').then(snapBlackList =>{
    snapBlackList.forEach(blackList =>{
       ...
       ...
       db.ref(`BlackListByUser/{blackList.key}/{userId}`).set(userInfo)
     })
  })
})

考虑到我必须遍历BlackListByUser集合的所有元素(与用户一样多的blackList),我认为我的解决方案并不是最有效的方法

-nodejs作为管理员-如何在不进行迭代的情况下通过所有阻止列表更新所有用户项目?像这样

db.ref(`BlackListByUser/{NO_MATTER_KEY}/{userId}`).set(userInfo)

注意:不建议使用Update()方法。

1 个答案:

答案 0 :(得分:0)

要能够更新节点,您将必须知道其完整路径。因此,如果您还不了解这些内容,则需要读取或查询数据库以获取路径。 Firebase没有等效的UPDATE BlackListByUser SET .... WHERE ...

可以为您节省一些带宽的是,仅保留构建路径所需信息的单独列表。因此,如果您只需要UID,则可以保留一个带有true值的UID列表(因为Firebase Realtime Database将自动删除没有值的键)。