Firebase在特定子项下检索数据

时间:2017-07-31 04:15:33

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

尝试从firebase检索时遇到了一些麻烦。这是我的firebase结构:

我试图做的是首先,我想在第一张图片中获取receiptItemID的列表。然后,在我获得ID后,对于每个ID,我想获得其数量和类型。之后,我将它们存储到数组中并执行一些排序。

这是我的代码:

var query = firebase.database().ref('');
                  query.once( 'value', data => {
                      data.forEach(subtypeSnapshot => {
                        var itemKey = subtypeSnapshot.key;

                        var query = firebase.database().ref('').child(itemKey);

                        });
                  });
                }); 

我设法获得了itemKey。但是,当我试图通过console.log那个部分获取每个receiptItem的细节时,它会打印出两个未定义的内容。关于如何检索数据的任何想法?

2 个答案:

答案 0 :(得分:1)

你不需要forEach循环,它太深了一层。相反,直接使用'data'参数。这个新的回调应该有效:

  var itemDetail = data.val();
  var subtype = itemDetail.type;
  var quantity = itemDetail.quantity;
  console.log(subtype + ' ' + quantity);

在示例代码的forEach的第一次迭代中,itemDetail将等于“Farmland”而不是整个对象;因此,子类型和数量为空。在新的回调中,itemDetail将等于整个对象,因此可以成功声明子类型和数量。

答案 1 :(得分:1)

var query = firebase.database().ref('receiptItems').child(itemKey);
                      query.once( 'value', data => {
                            var itemDetail = data.val();
                            var subtype = data.type;
                         // you may try data.toJSON().type as well
                            var quantity = data.quantity;
                         // try data.toJSON().quantity
                            console.log(subtype + ' ' + quantity);

                    });

在第二次检索中,您已经可以访问receiptItems / itemKey。这是receiptItems中的特定条目,而不是整个receiptItems数组。
因为只有一条记录,所以不需要再次应用data.forEach()。我们应用data.forEach()来获取记录/对象数组。在你的情况下,它只是一个条目。