2017-09-06 40 views
0
myFirebaseDatabase 
+accounts 

Instagram|account555555 
->extraInfo 
    ->counts 
    ->*followed_by* 
    ->follows 
    ->media 

Facebook|account999999 
->pages 
    +0 
    ->*fan_count* 
    +1 

以上是我的数据库帐户部分的结构。我想要做的是编写一个node.js脚本,该脚本汇总了连接到我们数据库的所有帐户的总计以下内容。每个平台的数据结构都不同,这对我来说很具挑战性。每个Facebook帐户都有多个页面,每个帐户都有自己的fan_count(下面),而Instagram是1:1。如何使用不同嵌套数据的Firebase forEach查询?

function getUsers(){ 

admin.database().ref("accounts").once('value').then(function(snapshot) { 
    snapshot.forEach(function(accountSnapshot){ 
    overallFollowers = 0 
    var instagram = accountSnapshot.val().extraInfo.counts; 
    var facebook = accountSnapshot.val().pages; 
    console.log(instagram); 
    console.log(facebook); 
    }); 
}); 
}; 

getUsers(); 

我试着把它放在一起,看看它是否会打印出接近我后面的东西。对于console.log(instagram),它将打印:{followed_by:39402,如下所示:136,media:21},如果不是instagram页面,则为undefined。对于Facebook,它将打印一个包含fan_count的复杂数组。如果我尝试调用accountSnapshot.val()。extraInfo.counts.followed_by,则会出现错误。

请帮助指引我在正确的方向。我如何简单地隔离followed_by和fan_count而不处理额外的数据,以便我可以将所有这些值一起添加?非常感谢你的帮助!

回答

0

我觉得Object.keys()是不是使用forEach

admin.database().ref("accounts").once('value', function (snapshot) { 
    const accountSnapshot = snapshot.val() || {}; 

    Object.keys(accountSnapshot).sort().map(key => { 
     if (accountSnapshot[key].extraInfo.counts.followed_by) { 
      console.log(key, accountSnapshot[key].extraInfo.counts.followed_by); 
     } 

     if (accountSnapshot[key].pages.fan_count) { 
      console.log(key, accountSnapshot[key].pages.fan_count); 
     } 
    }); 
}) 
+0

非常感谢最好的!今天要深入了解这一点。我运行你的代码并得到这个错误: (节点:42255)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):TypeError:无法读取未定义的属性'followed_by' (节点:42255)DeprecationWarning:未处理的承诺拒绝弃用。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。 这是我得到的错误,如果在我以前的代码中,我尝试调用accountSnapshot.val()。extraInfo.counts.followed_by。 你认为这个问题是什么? – ryangineer

+0

获取与fan_count同样的错误:( – ryangineer

+0

你的数据库使用的是Firebase推送键吗?,snapshot.val()的结果是什么,对不起,我真的无法在这里看到实际的数据库json –