2017-01-18 14 views
0

私は以下のJsonスキーマを持っていますが、ノード名(0153,0154)を取得するためにどのfirebaseクエリを使用できますか?(joel、vikram、sachin )私のjavascript関数である方法ここで電子メールIDに基づいてFirebaseデータベースからノード名を取得する

"EmployeeInfo": 
     { 
     "0153": 
     { 
      "Name":"Joel", 
      "Dept":"Engineering", 
      "Email":"[email protected]" 
     }, 
     "0163": 
     { 
      "Name":"Vikram", 
      "Dept":"Engineering", 
      "Email":"[email protected]" 
     }, 
     "0173": 
     { 
      "Name":"Sachin", 
      "Dept":"Engineering", 
      "Email":"[email protected]" 
     } 

一度使用した:このコードで

function Call() { 

    var dbref = new Firebase("https://logintrialapp.firebaseio.com/Employee/EmployeeInfo"); 
    var login = localStorage.getItem("Email"); 
    dbref 
    .once("value") 
    .then(function(snapshot) { 
     snapshot.forEach(function(childSnapshot) { 
      childData = childSnapshot.val(); 
      name = childData.Name; 
      var n = login.localeCompare(name); 
      console.log(name); 

      if (n != 0) { 
       var eid = snapshot.val(); 
       console.log("Hello" + eid); 
      } 
      console.log(snapshot.val()); 
     }) 
    }) 

私は名前を取得することができるが、私は、ノード名を取得したい、どのようなクエリが取得するために使用することができます電子メールIDの一致基準に基づくノード名

出力:

Joel 
Checkworks.html:50 Hello[object Object] 
    Checkworks.html:55 Object {0153: Object, 0163: Object, 0173: Object}0153: ObjectDept: "Engineering"Email: "[email protected]"Name: "Joel"__proto__: Object0163: Object0173: 
    Object__proto__: Object 
    Checkworks.html:44 Vikram 
    Checkworks.html:50 Hello[object Object] 
    Checkworks.html:55 Object0153: ObjectDept: "Engineering" 
    Email: "[email protected]"Name: "Joel"__proto__: Object0163 
    : Object0173: ObjectDept: "Engineering"Email: "[email protected]"Name: "Sachin"__proto__: Object__proto__: Object 
    Checkworks.html:44 Sachin 
    Checkworks.html:50 Hello[object Object] 
    Checkworks.html:55 Object {0153: Object, 0163: Object, 0173: Object} 

答えて

0

パスのためだけのキーをフェッチするREST APIの浅いコマンドが用意されました。これはまだSDKに追加されていません。

Firebaseでは、下にあるデータを取得せずにノード名のリストを取得することはできません。とにかくまだ。パフォーマンスの問題は、正規化を使用して解決できます。

基本的には、データを消費可能なチャンクに分割することです。タイトルなどのような2つのメタフィールドで可能なビデオキーのリストを1つのパスに保存し、一括コンテンツを別の場所に保存します。 のための '/ video_meta/ID /リンク、タイトル、... /video_lines/ID/...'

非正規化の詳細については、こちらの記事をチェックアウト:https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.htm

「名前を取得するには「(この場合は、push()によって作成されたID)任意のスナップショットのちょうどこのようname()を呼び出す:

var name = snapshot.name(); 

あなたはpush()によって自動生成された名前を取得したい場合は、あなただけでname()を呼び出すことができます返された参照は次のようになります:

var newRef = myDataRef.push(...); 
var newID = newRef.name(); 
1

childSnapshotコールchildSnapshot.keyのキーを取得するには、次の

.then(function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
     childKey = childSnapshot.key; // Get the key of the child 
     childData = childSnapshot.val(); 
     name = childData.Name; 
     var n = login.localeCompare(name); 
     console.log(name); 

     if (n != 0) { 
      var eid = snapshot.val(); 
      console.log("Hello" + eid); 
     } 
     console.log(snapshot.val()); 
    }) 
}) 
+0

これは私が最初のノードのデータのみを「0153」'[email protected]取得しています子ノードに反復されていません' – joel

関連する問題