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

Chi*_*ria 27 javascript firebase firebase-realtime-database

我正在尝试创建一个简单的程序,从用户获取名称,手机号码和电子邮件地址,然后将数据放在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>
Run Code Online (Sandbox Code Playgroud)

我已经像这样设置了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>
Run Code Online (Sandbox Code Playgroud)

这是我的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);
}
Run Code Online (Sandbox Code Playgroud)

这就是我将数据放到数据库中的方法.

在此输入图像描述

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

检索如何在插入时才能访问的唯一生成的字符串下,如何访问电子邮件,移动设备和名称?

按照上面的结构,我需要降低2级才能访问所需的数据,由于缺少文档,我不知道该怎么做,我不确定这样的东西是否会起作用:

database.child().child();
Run Code Online (Sandbox Code Playgroud)

Chi*_*ria 42

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

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

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

leadsRef.on('child_added', function(snapshot) {
      //Do something with the data
});
Run Code Online (Sandbox Code Playgroud)

唯一的区别是,如果是forEach(),它将从一开始就循环,所以如果要添加任何新数据,它还会加载以前的数据,但是如果是child_added,则监听器只对新孩子而不是之前存在的孩子.

  • 我真的希望这是在标准文档中。确实埋得很深! (2认同)

Jor*_*ega 6

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

下面我只是从评分最高的答案中注释掉了 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_)
      // });
  });
Run Code Online (Sandbox Code Playgroud)

在发布此内容时,我使用的是 firebase 5.9.1

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