在Firebase中,如何更新上一级别的所有节点的子节点?

时间:2016-10-19 14:24:25

标签: javascript firebase firebase-realtime-database nosql

这是我第一次在firebase数据库中构建数据。

我明白我应该优化阅读操作,并进行非规范化。

我有一个项目列表和一个用户列表。此外,每个用户都有一个与之关联的项目列表。

我可以轻松阅读和显示数据。但是,如果我必须编辑特定项目的名称,我就不知道如何正确地执行此操作。

拥有该项目的密钥我可以使用projects/key/name进行更新,但我还必须更新与每个用户关联的项目中的名称。我尝试使用users/*/key但没有发生任何事情。

我在基本的Web应用程序中使用firebase和javascript。

enter image description here

最初,true节点内的所有项目都有users值(而不是名称)。使用这种方法,我只需要在projects节点进行更新,但我必须执行多次读取操作。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要两个索引:

  1. 为用户查找项目(您已经拥有此项目)

  2. 查找项目的用户

  3. 我将两个查找列表存储为顶级列表:

    users
      $uid
        admin: true
    projects
      $projectid
        name: "Name of project"
        description: "Description of project"
    userProjects
      $uid
        $projectid: "Name of project"
    projectUsers
      $projectid
        $uid: true
    

    使用此结构,您可以查找所需的所有内容,而无需触发昂贵的查询。

    更新项目名称时,您只需加载项目的用户,然后对其进行迭代。如果您觉得有点想象,您甚至可以使用多地点update()一次更新所有内容。有关详情,请参阅此博客文章:https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html