如何扫描整个Firebase数据库?

时间:2017-11-17 12:56:37

标签: javascript firebase firebase-realtime-database

我需要扫描所有的firebase,进行以下查询,我已经在文档中研究过但未找到:

  

1)我需要计算数据库中有多少个购物中心。

     

2)我需要从每个商场获取数字数组,以便我可以插入   进入" .push()"功能在谷歌地图api和创建lat和   lng为每个多边形。

     

我将解释我的firebase架构的外观:

     

我有几个"购物中心管理员",在这个JSON中   他们自称(Aliansce,New Company)。

     

在每个管理员购物中心内,我有几个购物中心   其中(Aliansce:Bangu,纽约,ny2)和(新公司:luc2,   luc1)。

     

在每个购物中,我都有每个购物的ID。

     

在ID中,我有ID的日期。

     

在ID的日期里,我有我的商店   商场。

FIREBASE DATABASE:

{
  "aliansce" : {
    "AliansceShopping1" : {
      "1" : {
        "loja1" : {
          "coordenadasLat" : [ -33.564, -35.259, -35.155 ],
          "coordenadasLng" : [ 149.276, 148.705, 150.1 ],
          "nomefantasia" : "loja1"
        }
      },
      "2" : {
        "loja2" : {
          "coordenadasLat" : [ 2.258579, -59.008697, -55.493581, 13.727475 ],
          "coordenadasLng" : [ -95.338008, -82.330197, -14.127078, -37.857544 ],
          "nomefantasia" : "loja2"
        }
      }
    },
    "AliansceShopping2" : {
      "3" : {
        "loja1" : {
          "coordenadasLat" : [ -33.564, -35.259, -35.155 ],
          "coordenadasLng" : [ 149.276, 148.705, 150.1 ],
          "nomefantasia" : "Loja1"
        }
      },
      "4" : {
        "loja2" : {
          "coordenadasLat" : [ 2.258579, -59.008697, -55.493581, 13.727475 ],
          "coordenadasLng" : [ -95.338008, -82.330197, -14.127078, -37.857544 ],
          "nomefantasia" : "Loja2"
        }
      }
    },
    "versoes" : {
      "bangu" : {
        "190001" : "13/11/2017",
        "201701" : "13/11/2017",
        "201706" : "13/11/2017"
      }
    }
  },
  "novoAdm" : {
    "novoAdmShopping1" : {
      "1n" : {
        "loja1" : {
          "coordenadasLat" : [ -33.564, -35.259, -35.155 ],
          "coordenadasLng" : [ 149.276, 148.705, 150.1 ],
          "nomefantasia" : "loja1"
        }
      },
      "2n" : {
        "loja2" : {
          "coordenadasLat" : [ 2.258579, -59.008697, -55.493581, 13.727475 ],
          "coordenadasLng" : [ -95.338008, -82.330197, -14.127078, -37.857544 ],
          "nomefantasia" : "loja2"
        }
      }
    },
    "novoAdmShopping2" : {
      "3n" : {
        "loja1" : {
          "coordenadasLat" : [ -33.564, -35.259, -35.155 ],
          "coordenadasLng" : [ 149.276, 148.705, 150.1 ],
          "nomefantasia" : "Loja1"
        }
      },
      "4n" : {
        "loja2" : {
          "coordenadasLat" : [ 2.258579, -59.008697, -55.493581, 13.727475 ],
          "coordenadasLng" : [ -95.338008, -82.330197, -14.127078, -37.857544 ],
          "nomefantasia" : "Loja2"
        }
      }
    },
    "versoes" : {
      "nwVer" : {
        "190001" : "13/11/2017",
        "201701" : "13/11/2017",
        "201706" : "13/11/2017"
      }
    }
  }
}

OBS:我使用JAVASCRIPT

CODE:

function initFireBase(){
    var config = {
        apiKey: "",
        authDomain: "",
        databaseURL: "",
        projectId: "",
        storageBucket: "",
        messagingSenderId: ""
    };
    firebase.initializeApp(config);

    var ref = firebase.database().ref('/'); // INICIA NA RAIZ DO NÓ
    var rootDatabase = new Array();
    var childRootDatabase = new Array();
    var childParentDatabase = new Array();
    var tst;
    var tst2;


    ref.on('value', function(snap){
        // PERCORRE TODOS OS "CHILD'S" DO {REF}
        snap.forEach(function(rootSnapshot){
            rootDatabase = [...rootDatabase, rootSnapshot.key]; // CRIA UM ARRAY PARA AS "KEYS" DOS "CHILD'S"
        });

        for(a in rootDatabase){


                    tst = firebase.database().ref('' + rootDatabase[a]);

                    tst.on('child_added', function(snap){
                        snap.forEach(function(sna){
                            childRootDatabase = [...childRootDatabase, sna.key];
                        });
                    });

                    for(b in childRootDatabase){
                        tst2 = firebase.database().ref('/' + rootDatabase[a] + '/' + childRootDatabase[b]);
                        console.log(tst2.key);
                    }
        }



    });        

我能够访问所有这些孩子,但我无法获得coordinatesLat和lng;

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你要完成的任务。但是代码看起来不是最理想的,所以希望对它的解释会对你有所帮助。

由于您从根目录加载值,因此无需再使用任何嵌套侦听器。相反,您可以迭代(嵌套)快照并获取所需的数据。执行代码当前执行操作的更惯用的方法是:

ref.on('value', function(snap){
    mallKeys = [];
    snap.forEach(function(adminSnapshot){
        adminSnapshot.forEach(function(mallSnapshot) {
            mallKeys.push(mallSnapshot.key);
        });
    });
    console.log("There are "+mallKeys.length+" malls");
});