【问题标题】:How to retrieve nested child value in Firebase database using javaScript?如何使用 javaScript 检索 Firebase 数据库中的嵌套子值?
【发布时间】:2017-01-30 17:19:53
【问题描述】:

这是我的 Fireabse 数据库结构。我想检索不是硬编码值的20170116 键的数据。是动态键。我得到了一些键和值,例如:

这是我的功能:

function getData(prospectId) {
    database.ref('users/'+prospectId).once('value').then(function(snapshot) {
        var prospectId = snapshot.key ;
        console.log("prospectId : "+ prospectId); // output is : prospectId : 1104812

        snapshot.forEach(function(childSnapshot) {
            var businessUrl = childSnapshot.key;
            console.log("businessUrl : "+ businessUrl); // output is : businessUrl : http:\\www.abc.com
            var dates = Object.keys(childSnapshot.val());
            console.log("dates : "+ dates); //output is : dates : 20170116,20170117,20170119,20170121
            var singleDate = dates[0];
            console.log("singleDate : "+ singleDate); //output is : singleDate : 20170116
        });
    });
}  

getData(1104812);

那么如何获取20170116 日期数据或快照呢?

【问题讨论】:

  • 下面有根据的猜测。如果不是这样(对于以后的问题),请将 JSON 的图片替换为实际的 JSON 作为文本,您可以通过单击 your Firebase Database console 中的导出 JSON 链接轻松获得。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您正在将值侦听器附加到 /users/1104812。因此,您在回调中获得的快照将包含其下的子节点:201701162017011720170119

当您循环遍历子节点(使用 snapshot.forEach(function()时,您的 childSnapshot 将依次成为这些节点中的每一个。

这些节点都没有子 clientUrldistrictId,它们比树更深一层:

database.ref('users/'+prospectId).once('value').then(function(snapshot) {
  var prospectId = snapshot.key ;

  snapshot.forEach(function(snapshot1) {
    console.log(snapshot1.key); // e.g. "http://..."
    snapshot.forEach(function(snapshot2) {
      console.log(childSnapshot.key); // e.g. "20170116"
      childSnapshot.forEach(function(snapshot3) {
        console.log(grandchildSnapshot.key); // e.g. "-Kb9...gkE"
        console.log(grandchildSnapshot.val().districtId); // "pne"
      });
    });
  });
});

【讨论】:

  • 无论您在代码中写了什么,我都记录了该值并打印了未定义的值。这里console.log(childSnapshot.key) 这行打印http:\\www...console.log(grandchildSnapshot.key) 这是打印20170116,`console.log(grandchildSnapshot.val().districtId)` 这是打印undefined
  • 是的,看起来您在 JSON 中还有另一个级别。我更新了代码以添加另一个块。
猜你喜欢
  • 2022-11-02
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多