【问题标题】:Firebase - Get data by key or chid values - javascriptFirebase - 通过键或 chid 值获取数据 - javascript
【发布时间】:2017-08-07 01:45:17
【问题描述】:

我正在尝试从 firebase 数据库中读取数据,并将其显示在网页中。

我的数据库结构如下 -

如果您看到图片,我可以使用以下代码读取“UserData” -

firebase.initializeApp(config);
var database = firebase.database(); 

var ref = database.ref('UserData');
ref.once('value', gotData1, errData);

    function gotData1(data){
    //console.log(data.val());
    var usrData = data.val();
    var keys = Object.keys(usrData);
    //console.log(keys);

    for (var i = 0; i< keys.length; i++){
        var k = keys[i];
        var id = usrData[k].AssignedID;
        var name = usrData[k].Name;

        $(document).ready(function() {
             var $formrow = '<tr><td>'+id+'</td><td>'+name+'</td></tr>';
             $('#userInfo').append($formrow);
        });
     }
    }

在图像的突出显示部分,您可以看到值为 196214、196215、196216 的键

现在,我需要通过将键值与可用的 AssignedID 匹配来获取 "One, Count" 的值。

我怎样才能达到同样的效果?

更新,JSON 为文本 -

{
  "app_url" : "https://app_name?ls=1&mt=8",
  "UserData" : {
    "HNpTPoCiAYMZEeVOs01ncfGBj6X2" : {
      "Name" : "Arunima Vj"
      "Email" : "asd@upp.com",
      "AssignedID" : 196214
    },
    "VXU2tdGdzZX90PJa9mpEL3zAiZo2" : {
      "Name" : "Lakshman Medicherla"
      "Email" : "asd@upp.com",
      "AssignedID" : 196215
    },
    "dFlwtqDNrja2RkOySVtW106IQP62" : {
      "Name" : "Prashanth Sripathi"
      "Email" : "asd@upp.com",
      "AssignedID" : 196216
    }
  }
  "teams" : {
    "196214" : {
      "1105" : {
        "One" : 7619,
        "count" : 24
      },
      "1379" : {
        "Two" : 7145,
        "count" : 21
      }
    },
    "196215" : {
      "1111" : {
        "One" : 7779,
        "count" : 20
      },
      "1508" : {
        "Two" : 1176,
        "count" : 21
      }
    },
    "196216" : {
      "1106" : {
        "One" : 7845,
        "count" : 22
      },
      "1509" : {
        "Two" : 1156,
        "count" : 26
      }
    }
  }
}

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 your Firebase Database console 中的导出 JSON 链接轻松获得。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • 嗨弗兰克,感谢您的评论。我只致力于设计和开发他的 webapp,所以我无权访问 firebase 应用程序窗口。更新:请检查,我已经用 JSON 作为文本更新了帖子
  • @FrankvanPuffelen 请检查,我已经用 JSON 作为文本更新了帖子

标签: javascript jquery firebase web firebase-realtime-database


【解决方案1】:

您的数据结构非常嵌套,这使得代码更难阅读。但这通常用我能想到的最少代码来导航结构:

var ref = firebase.database().ref("/42824688");

ref.child("UserData").once('value', gotUserData);

function gotUserData(snapshot){
  snapshot.forEach(userSnapshot => {
    var k = userSnapshot.key;
    var id = userSnapshot.val().AssignedID;
    var name = userSnapshot.val().Name;
    ref.child("teams").child(id).once("value", teamsSnapshot => {
      teamsSnapshot.forEach(teamSnapshot => {
        var teamKey = teamSnapshot.key;
        teamSnapshot.forEach(teamProp => {
          var prop = teamProp.key;
          var val = teamProp.val();
          console.log(k+" "+name+" "+id+": "+teamKey+", "+prop+"="+val);
        });
      });
    });
  })
}

因此,对于每个用户,这会加载该用户的团队数据,然后遍历 teamsSnapshot 以获取每个 teamSnapshot,然后遍历 that 以获取每个团队属性。 p>

工作的jsbin:http://jsbin.com/noziri/edit?html,js,console

【讨论】:

  • 谢谢弗兰克,这段代码对我很有帮助。现在,我想在两个不同的变量中获取“one”、“count”的值,当我尝试使用 var val = teamProp.val().count; 获取相同的值时用于计数,“未定义”打印到控制台,知道为什么会这样吗?再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2020-04-04
相关资源
最近更新 更多