嵌套Firebase查询

时间:2019-02-09 17:14:59

标签: javascript angular firebase ionic-framework firebase-realtime-database

我正在尝试为正在构建的队列系统执行嵌套的Firebase查询。目的是获取“站点”列表,然后查询“项目”。匹配给定的“站”。然后显示数据,以便列出我的“站”,并在该站下列出与该站匹配的“项目”。我的数据结构如下:

projects
   -LYFLi59ZFTcHHNGEl4Y
   -LYFNmlW_fDOxOGep1VT
        SKU: "66534"
        buyerEmail: "guy@internet.com"
        comments: "comment"
        createdAt: 1549684385662
        queue: 1
        station: "Lathe"
        timeTest: "Fri Feb 08 2019"
stations
   -LYCB7awMyE7gxRKlojN
        StationtName: "Lathe"
   -LYCCBjC4JT9rZlgJSiL
   -LYCCD0J6VqafpRL8Mlf

在这种情况下,我正在寻找等于“车床”的产品,并将其显示在“车床”队列中。

现在,我有一个列表可以返回我的所有电台:

this.stationRef = firebase.database().ref('stations/');
        this.stationRef.on('value', resp => {
          this.stations = [];
          this.stations = snapshotToArray(resp);

        }); 

然后我有另一个引用,它返回按桩号排序的所有项目,并等于stations数组中的桩号。

    this.projectRef = firebase.database().ref('projects/')
       .orderByChild('station')
       .equalTo(------this.Is My Problem-----);  ///// Looking for this.stationId //// 
          this.projectRef.on('value', resp => {
            this.projects = [];
            this.projects = snapshotToArray(resp);

        });

我正在使用以下代码返回要传递给projectRef的桩号的值,但是我无法在循环外获取变量,也无法在循环内使用projectRef。

    const snapshotToArray = snapshot => {
              let returnArr = [];

              snapshot.forEach(childSnapshot => {
                  let item = childSnapshot.val();
                  item.key = childSnapshot.key;
                  this.stationId = childSnapshot.val().StationtName;
           <--------------------------------------->
                     this.stationId is the 
                     variable I want to pass
                     into the projectRef
           <---------------------------------------->
                  returnArr.push(item);

            });
              return returnArr;
            } 

预先感谢您的帮助!我是否错过了任何最佳做法或以错误的方式来解决问题?

再次感谢..

1 个答案:

答案 0 :(得分:1)

Firebase的核心是完全扁平化数据结构(NO-SQL)。但是同时,复杂查询一直是firebase的痛点,这就是为什么他们要求我们使用firestore来获取复杂查询结构的原因。

据我所知,您想在列表中列出其产品的子列表。实现一次同步的最佳方法是将项目ID /名称的数组放入工作站。因此,您只收听站点节点,它具有所有项目ID的数组,并仅显示站点列表,并使用数组显示项目的子列表,仅使用该ID只需轻按打开项目的详细信息即可。

台站-      ID-      站名      产品:{       prod1,prod2,prod3       }

但是,如果您想在同一屏幕上显示产品的所有信息,则只需加载所有产品(如果数量不超过百万,则移至Firestore。)一次,然后使用键和值作为产品本身将其保存在地图中,并用于显示信息。 除非确实需要

,否则不要在firebase中进行嵌套查询