Firebase特定节点读写

问题描述 投票:0回答:1

我在网站上实现了一个表单来创建firebase用户,并根据表单中选定的状态为firebase数据库添加一个节点。 因此,例如,如果用户在表单中选择“夏威夷”然后创建帐户,则帐户信息将存储在firebase数据库中的“Hawaii / id”中。

// JSON structure
    {
      "Hawaii": {
        "place1Id": {
          //infos
        },
        "place2Id": {
          //infos
        }
      },
      "New York": {
        "place1Id": {
          //infos
        },
        "place2Id": {
          //infos
        }
      }
    }

我的问题是如何确保稍后当用户将信息添加到他的帐户时,使用先前创建的帐户提供的凭据,此信息将存储在正确的节点中(例如夏威夷)

我试图在当前用户ID和来自States节点的密钥之间进行比较,但是我的数据库非常大(并且会变得更大),因此代码最多需要10秒才能确定用户在数据库的哪个节点。并且必须在每个页面上进行相同的过程,因此它不是好的解决方案。

var placesRef = firebase.database().ref();
    placesRef.once("value", function(snpashot) {
      if (snpashot.child("Hawaii").hasChild(user.uid)) {
        console.log("Place is in Hawaii");
        activiteRef = firebase.database().ref().child("Hawaii").child(user.uid);
      }});

能帮我解决这个问题吗?

谢谢!

javascript firebase firebase-realtime-database firebase-authentication
1个回答
0
投票

如果你关注uid,你不需要做任何比你已经拥有的更多的事情:

activityRef = firebase.database().ref().child("Hawaii").child(user.uid);

这是对您想要的节点的直接引用(如果我正确理解您)。你可以读取数据:

activityRef.once('value').then(snap => console.log(snap.exists, snap.val());

如果用户从未在那里写过,那将是null,否则将包含数据。您还可以执行update()等其他操作来更改此位置的数据。

无需执行顶级查询来检查节点是否已存在 - 您可以直接读取它。

© www.soinside.com 2019 - 2024. All rights reserved.