web-dev-qa-db-ja.com

Firebase-キーまたはChid値でデータを取得する-JavaScript

Firebaseデータベースからデータを読み取って、それをWebページに表示しようとしています。

私のデータベース構造は次のとおりです- Image here

画像が表示された場合、以下のコードを使用して「serData」を読み取ることができます-

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" : "[email protected]",
      "AssignedID" : 196214
    },
    "VXU2tdGdzZX90PJa9mpEL3zAiZo2" : {
      "Name" : "Lakshman Medicherla"
      "Email" : "[email protected]",
      "AssignedID" : 196215
    },
    "dFlwtqDNrja2RkOySVtW106IQP62" : {
      "Name" : "Prashanth Sripathi"
      "Email" : "[email protected]",
      "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
      }
    }
  }
}
8
Prashanth kumar

データ構造が非常にネストされているため、コードが読みにくくなります。しかし、これは私が思いつくことができる最小のコードで一般的に構造をナビゲートします:

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各チームプロパティを取得します。

動作しているjsbin: http://jsbin.com/noziri/edit?html,js,console

6