首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套Firebase查询

嵌套Firebase查询
EN

Stack Overflow用户
提问于 2019-02-10 01:14:59
回答 1查看 77关注 0票数 0

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

代码语言:javascript
复制
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

在这种情况下,我正在寻找的产品是equalTo“车床”,并在“车床”队列中展示它们。

现在,我有一个返回所有站点的列表:

代码语言:javascript
复制
this.stationRef = firebase.database().ref('stations/');
        this.stationRef.on('value', resp => {
          this.stations = [];
          this.stations = snapshotToArray(resp);

        }); 

然后,我有了另一个ref,它返回所有按stations排序的项目,并且等于stations数组中的Station值。

代码语言:javascript
复制
    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。

代码语言:javascript
复制
    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;
            } 

提前感谢您的帮助!我是不是遗漏了什么最佳实践,或者解决问题的方式错了?

再次感谢..

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-10 02:41:20

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

据我所知,您想在这里列出站点及其产品的子列表。实现一次同步的最好方法是将项目id/名称的数组放入工作站。因此,您只监听station节点,它有包含所有项目ID数组,只需显示站点列表,并使用array显示项目的子列表,只需使用ID点击打开项目的详细信息。

stations id- stationName产品:{ prod1,prod2,prod3 }

但是,如果你想在同一个屏幕上显示所有产品的信息,也只需要加载所有产品(如果不是数百万个其他产品,就转移到firestore)。一次并将其保存在地图中,使用键和值作为产品本身,并使用它显示信息。除非迫不得已,否则不要在firebase中进行嵌套查询

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54608598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档