【问题标题】:Firebase - How to find the name of other children using a child?Firebase - 如何使用孩子查找其他孩子的名字?
【发布时间】:2018-03-21 22:30:48
【问题描述】:

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

当用户登录时,我需要进入这个数据库并找出“兄弟”是输入的用户名的电子邮件地址。我尝试将用户名保留为父母的姓名,但由于特定原因,我不得不将其更改回此结构。那么如何使用新结构(电子邮件和用户名都是子级)来实现这一点?这是我在用户名是父级时使用的函数,用于查找电子邮件 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"
  }
}

【问题讨论】:

  • 不是描述您尝试查询的数据结构,而是编辑您的问题以包含实际 JSON 的小 sn-p(作为文本)。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
  • @FrankvanPuffelen 好的,我现在已将 JSON 添加到我的问题中。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

你需要一个查询来得到你想要的结果:

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

【讨论】:

  • 第二种方法我没看懂,但第一种完全可以!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-04-28
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多