2017-01-18 135 views
0

我有以下Json模式,可以使用什么firebase查询来获取节点名称(0153,0154),我可以获取名称(joel,vikram,sachin )采用一次法从Firebase数据库根据emailId匹配获取节点名称

"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]" 
     } 

这里是我的javascript函数:

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()); 
     }) 
    }) 

与此代码我能够得到的名字,但我要检索的节点名称,有什么可以使用查询来获得节点名称基于emailid匹配标准

输出:

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中,如果不检索下面的数据,就无法获取节点名称列表。还没有。性能问题可以通过规范化来解决。

本质上,您的目标是将数据拆分为易损件。将您的视频密钥列表存储在一个路径中,可能包含标题等多个元字段,并将批量内容存储在其他位置。对于 '/ 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