Firebase - 如何查找使用孩子的其他孩子的姓名?

时间:2017-10-10 13:28:44

标签: javascript firebase firebase-realtime-database

在firebase中,我尝试建立一个用户可以使用他/她的用户名和密码登录的登录系统。但是,由于firebase身份验证需要电子邮件ID和密码,我有另一个数据库,其中用户名和电子邮件ID都存储在父项下(我不确定父项是否是正确的单词)作为其子项。父项的名称是随机生成的。

当用户登录时,我需要转到此数据库并查找其兄弟"的电子邮件地址。是输入的用户名。我尝试将用户名保留为父级的名称,但由于特定原因,我不得不将其更改回此结构。那么如何使用新结构(电子邮件和用户名都是子级)来实现这一目标?这是我在用户名是父级时使用的函数,用于查找电子邮件ID。

function getEmail(username) {
    var usersRef = database.ref(username).child("email");
    usersRef.on("value", function(snapshot) {
        email = snapshot.val();
    }, function (errorObject) {
        console.log("The read failed: " + errorObject.code);
    });
}

编辑:这是JSON:

{
  "user 1" : {
    "email" : "test1@example.com",
    "username" : "Test1"
  },
  "user 2" : {
    "email" : "test2@example.com",
    "username" : "Test2"
  }
}

1 个答案:

答案 0 :(得分:0)

您需要一个查询来获得所需的结果:

var usersRef = database.ref().orderByChild("username").equalTo(username);
usersRef.once("child_added", function(snapshot) {
    email = snapshot.val().email;
}, function (errorObject) {
    console.log("The read failed: " + errorObject.code);
});

我的代码使用once("child_added",因为您可能只对第一个匹配的孩子感兴趣。

或者,您可以修改数据结构以使用用户名作为键:

"emailsByUsernames": {
  "Test1" : "test1@example.com",
  "Test2" : "test2@example.com",
}

然后你可以直接查找这样的电子邮件:

var usersRef = database.ref(emailsByUsernames).child(username);
usersRef.on("value", function(snapshot) {
    email = snapshot.val();
}, function (errorObject) {
    console.log("The read failed: " + errorObject.code);
});