Firebase特定节点读写

时间:2018-03-05 19:04:11

标签: javascript firebase firebase-realtime-database firebase-authentication

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

// 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);
      }});

你能帮我解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在使用uid,那么您就不需要做任何超出您已有线路的事情了:

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

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

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

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

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