javascript - 嵌套 Firebase 查询

标签 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);

        }); 

然后我有另一个引用,它返回按电台排序的所有项目,并且等于电台数组中的电台值。

    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;
            } 

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

再次感谢..

最佳答案

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

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

车站- ID- 站名 产品:{ 产品 1、产品 2、产品 3 }

但是,如果您想在同一屏幕上显示产品的所有信息,也只需加载所有产品(如果不是数以百万计,则转移到 firestore。)一次,然后使用键和值作为产品本身将其保存在 map 中,然后使用它来显示信息。 除非确实需要,否则不要在 firebase 中进行嵌套查询

关于javascript - 嵌套 Firebase 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54608598/

相关文章:

javascript - 这些代码有什么区别?

javascript - Chart.js 显示时间数据

typescript - @ngrx/store-devtools : instrumentStore() returns an array of objects instead of providers

html - Angular:在日期字段的输入类型文本中添加斜杠 "/"

node.js - 从 Firebase Callable 函数获取用户 IP 地址

javascript - 使用 Prism JS 不显示标记

javascript - 你如何计算粒子相互弹跳的速度?

angular - npm 错误!代码 ERR_TLS_CERT_ALTNAME_INVALID

android - 如何使用 flutter 在 Firebase 云 Firestore 中添加多个节点

ios - 检查用户是否存在于 Firebase 中不起作用 - Swift