我正在尝试对我正在构建的队列系统进行嵌套的 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/