【问题标题】:Firebase retrieve nested dataFirebase 检索嵌套数据
【发布时间】:2017-12-22 16:00:42
【问题描述】:

我在尝试从 Firebase 检索时遇到了一些问题。基本上我的组表是这样的:

在这种情况下,在group ID -KpFibCHjJ1xpfLd07WJ 下,有一个account ID -KpFiX2L7ENt6EBgrB0S。按理说会有不止一个账号,我还在做数据插入。

我试图检索特定组下帐户的唯一推送 ID 列表:

var accounts = [];
    var query = firebase.database().ref('groups').orderByChild('address').equalTo('Blk 165');
    query.once( 'value', data => {
        data.forEach(userSnapshot => {
            let groupData = userSnapshot.val();
            console.log(groupData );
            accounts.push(groupData .accounts);

            for(var i = 0; i < accounts.length; i++){
              console.log(accounts[i]);
            }
        });
    });

然而,从 for 循环中打印出来的是:

Object {
  "-KpFiX2L7ENt6EBgrB0S": true,
}

关于如何提取特定子项下的唯一推送 ID (-KpFiX2L7ENt6EBgrB0S) 列表并将它们存储到临时数组中的任何想法?

【问题讨论】:

    标签: javascript json firebase firebase-realtime-database nosql


    【解决方案1】:

    我并没有真正使用 Firebase,但听起来您正试图从对象数组中提取特定键?你可以做这样的事情来让你走上正确的道路,但我仍然不确定这是否是你所要求的。

    我创建了一组愚蠢的数据来尝试匹配您获得的结果。

    var arr = [
      { 
        "-KpFiX2L7ENt6EBgrB0S" : true 
      },
      { 
        "-MXDOFKFFM3738FJF" : true 
      }
    ]
    
    // Will store the info you want
    var arr2 = []
    
    for(var i = 0; i < arr.length; i++) {
      var temp = Object.keys(arr[i]).toString()
      arr2.push(temp)
    }
    
    console.log(arr2) // ["-KpFiX2L7ENt6EBgrB0S", "-MXDOFKFFM3738FJF"]
    

    这也是一个有效的codepen

    【讨论】:

    • 是的,这就是我想要做的。但是如何将从 firebase 返回的数据填充到数组中?是不是这样:var arr = groupData.accounts;
    • 这可能行得通。如果你 console.log 只是 groupData.accounts,它会打印出什么?
    • 当我在控制台打印出来时,它只显示 arr [object Object]
    • 好吧,它看起来像是一个数组,所以你不应该将一个数组推入另一个数组。也许只是将帐户重新分配给“accounts = groupData.accounts”之类的东西。然后像我在解决方案中所做的那样循环访问帐户。让我知道这是否有帮助。
    • 其实只要frank建议的单行就可以了!非常感谢您的帮助!
    【解决方案2】:

    诀窍是Object.keys(groupData.accounts):

    var accounts = [];
    var query = firebase.database().ref('groups').orderByChild('address').equalTo('Blk 165');
    query.once( 'value', data => {
        data.forEach(userSnapshot => {
            let groupData = userSnapshot.val();
    
            let accounts = Object.keys(groupData.accounts);
    
            console.log(accounts);
        });
    });
    

    【讨论】:

    • 我明白了。这就像一个魅力!非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多