【问题标题】:how to use forEach() method in querying firebase realtime database如何使用 forEach() 方法查询 firebase 实时数据库
【发布时间】:2018-12-14 19:24:32
【问题描述】:

我的问题是关于在 firebase 云函数中查询深层实时数据库。

我的数据库结构有点像这样:

{  
     "sellers":  
        {  
           "s0": {  
                 "customers":    
                           {  
                           "c0":  
                               {
                                "name":"ABC",  
                                "email":"abc@gmail.com",  
                                "phone":"8899889988",  
                                "products":  
                                         {  
                                           "123":
                                                {  
                                               "productname":"WHIRLPOOL MACHINE",  
                                                "dop":"2018-07-03",  
                                                "period":"2"  
                                                 },  
                                           "456":  
                                                 { 
                                                 "productname":"ONIDA OVEN",  
                                                 "dop":"2018-07-04",    
                                                 "period":"1"    
                                                 }  
                                         }  
                                      },  .....and so on

现在,在我的云函数中,我写了一段代码来获取客户(c0)的每个产品的周期,它是这样的:

exports.testQuery =  functions.https.onRequest((req,res) => {
  const dates = [];
  ref.child("sellers/s0/customers/c0").once("value").then(snap => {
    const childSnap = snap.val().products;
    childSnap.forEach(grandSnap => {
       const days = grandSnap.val().period;
       dates.push(days);
    });
    return dates;
  }).then(response => res.send(response))
  .catch(error => res.send(error));
});  

当我部署该功能时,我的预期应该是:

["2","1"]

它似乎不起作用,而我认为我的逻辑是正确的。 我在网页上得到的输出是:

{}

请帮忙!

另外,forEach() 方法不能嵌套在对多个客户和多个卖家进行此操作吗?

【问题讨论】:

  • 这可能是使用 no-sql 数据库时最大的问题之一。浏览深度文档最终可能会成为一场噩梦。您只能在类似项目的数组中使用 forEach,您可能希望对每个级别使用 Object.keys(doc).forEach(key => //do stuff ) 等等。
  • @CristianS。你好!我知道了。但是我如何在一个对象中获取整个对象呢?通过使用 Object.keys(obj) 我们只能以数组格式获取该引用对象的键。
  • 那么您遍历键并且您仍然拥有对象本身,不是吗?你只需要做 Object.keys(doc).forEach(key => doc[key] // doc.key 是对象属性)
  • @CristianS。它有帮助!太感谢了! :) 干杯

标签: javascript node.js firebase google-cloud-functions


【解决方案1】:

您的products 不是数组,因此它没有forEach。你也应该只加载products,因为你使用的都是:

const dates = [];
ref.child("sellers/s0/customers/c0/products").once("value").then(snap => {
  snap.forEach(productSnap => {
     const days = productSnap.val().period;
     dates.push(days);
  });
  return dates;
}).then(response => res.send(response))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多