如何将Firebase forEach查询与不同的嵌套数据一起使用?

时间:2017-09-06 01:34:17

标签: node.js firebase firebase-realtime-database

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。

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),它将打印:{follow_by:39402,follow:136,media:21}并且如果它不是Instagram页面,则为undefined。对于Facebook,它将打印一个包含fan_count的更复杂的数组。如果我尝试调用accountSnapshot.val()。extraInfo.counts.followed_by,我会收到错误。

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

1 个答案:

答案 0 :(得分: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);
      }
  });
})