【问题标题】:Getting node names from Firebase database based on emailId match根据 emailId 匹配从 Firebase 数据库获取节点名称
【发布时间】:2017-01-19 00:52:37
【问题描述】:

我有以下 Json 模式,我可以使用什么 firebase 查询来获取节点名称(0153,0154),我可以使用一次方法获取名称(joel,vikram,sachin)

 "EmployeeInfo":
        {
        "0153":
        {
          "Name":"Joel",
          "Dept":"Engineering",
          "Email":"joel@dept.com"
        },
        "0163":
        {
          "Name":"Vikram",
          "Dept":"Engineering",
          "Email":"vikram@dept.com"
        },
         "0173":
        {
          "Name":"Sachin",
          "Dept":"Engineering",
          "Email":"Sachin@dept.com"
        }

这是我的 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: "joel@dept.com"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: "joel@dept.com"Name: "Joel"__proto__: Object0163
    : Object0173: ObjectDept: "Engineering"Email: "Sachin@dept.com"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}

【问题讨论】:

    标签: javascript json firebase-realtime-database


    【解决方案1】:

    获取childSnapshot的key调用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());
        })
    })
    

    【讨论】:

    • 这不是迭代到子节点我只获取第一个节点的数据'0153''joel@dept.com'
    【解决方案2】:

    现在 REST API 中有一个浅层命令,它将仅获取路径的键。这尚未添加到 SDK。

    在 Firebase 中,如果不检索下面的数据,就无法获取节点名称列表。反正还没有。性能问题可以通过归一化来解决。

    本质上,您的目标是将数据拆分为可使用的块。将您的视频键列表存储在一个路径中,可能带有几个元字段(如标题等),并将批量内容存储在其他位置。为了 '/video_meta/id/link, 标题, ... /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();
    

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 2018-08-20
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多