我在网站上实现了一个表单来创建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);
}});
你能帮我解决这个问题吗?
谢谢!
答案 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()
来更改此位置的数据。
无需执行顶级查询来检查节点是否已存在 - 您可以直接读取它。