如何从 Firebase 数据库中检索数据?

新手上路,请多包涵

我正在尝试创建一个简单的程序,它从用户那里获取姓名、手机号码和电子邮件地址,然后将数据放在 Firebase 实时数据库中。

有 3 个输入框和一个按钮,单击它可以执行上述操作。这是代码:

 <input type="text" id="name">
<input type="text" id="mobile">
<input type="text" id="email">

<button type="button" id="button" onclick="addLead()">Submit</button>

我已经像这样设置了 Firebase:

 <script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>
<script>
  // Initialize Firebase
  var config = {
    ...
  };
  firebase.initializeApp(config);

  var database = firebase.database();
</script>

这是我的 addLead() 函数:

 function addLead() {
    var clientName = document.getElementById('name').value;
    var clientMobile = document.getElementById('mobile').value;
    var clientEmail = document.getElementById('email').value;

    var newClientKey = database.ref().child('leads').push().key;
    database.ref('leads/'+newClientKey+'/name').set(clientName);
    database.ref('leads/'+newClientKey+'/mobile').set(clientMobile);
    database.ref('leads/'+newClientKey+'/email').set(clientEmail);
}

这就是我将数据放入有效数据库的方式。

在此处输入图像描述

所以 newClientKey 正在生成一些字符串,插入时效果很好,但现在如何检索? 官方文档 没有帮助。此生成的字符串可能基于时间戳,如果是这种情况,则无法再次生成它。

在检索时,我将如何访问仅在插入时可用的唯一生成的字符串下的电子邮件、手机和姓名?

按照上面的结构,我需要降低 2 级才能访问所需的数据,并且由于缺少文档,我不知道该怎么做,我不确定这样的事情是否可行:

 database.child().child();

原文由 gegobyte 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
2 个回答

这个问题的答案深藏在 Firebase 数据库参考 中。 forEach() 用于在不知道孩子确切路径的情况下到达孩子。

 var leadsRef = database.ref('leads');
leadsRef.on('value', function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var childData = childSnapshot.val();
    });
});

现在 childSnapshot 将包含所需的数据,同样的东西也可以使用 child_added 访问。

 leadsRef.on('child_added', function(snapshot) {
      //Do something with the data
});

唯一的区别是在 forEach() 的情况下,它将从头开始循环,因此如果要添加任何新数据,它也会加载以前的数据,但在 child_added 的情况下,侦听器仅适用于新孩子,而不适用于以前存在的孩子。

原文由 gegobyte 发布,翻译遵循 CC BY-SA 3.0 许可协议

您还可以使用点符号来获取您正在寻找的孩子的价值。

下面我只是从评分最高的答案中注释掉了 forEach 循环,并添加了一个 console.log()。

  var leadsRef = database.ref('leads');
  leadsRef.on('value', function(snapshot) {
      // snapshot.forEach(function(childSnapshot) {
        var childData = snapshot.node_.children_.root_.value.value_;
        console.log("snapshot.node_.children_.root_.value.value_: ", snapshot.node_.children_.root_.value.value_)
      // });
  });

在发布这篇文章时,我正在使用 firebase 5.9.1

src=”https://www.gstatic.com/firebasejs/5.9.1/firebase.js”

原文由 Jortega 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题