在Firebase中,我需要根据2个表提取数据

时间:2016-11-14 21:11:48

标签: javascript firebase firebase-realtime-database

在Firebase中,我需要从表/节点中提取数据。

我有一个名为职位的表,另一个名为组织

要求的结果:我需要让所有没有工作的公司。

这是我的作业列表节点/表的一个虚拟示例(注意这几乎是一个副本):

jobs: {
    -k3resdfsfsdfsdf:{jobName: test1, companyId: 1h3hr4jrkfk5k5kff},
    -k3resdfsfsdfsdf:{jobName: test2, companyId: 2h3hr4jrkfk5k5kff},
    -k3resdfsfsdfsdf:{jobName: test3, companyId: 2h3hr4jrkfk5k5kff}    
}

这是我的组织表(注意这几乎是一个副本):

organisations: {
    fsdfsddfsfsdfsdf:{companyId: 1h3hr4jrkfk5k5kff, companyName: comp a, address: 12 road},
    jhhjresdfsfsdfsf:{companyId: 2h3hr4jrkfk5k5kff, companyName: comp b, address: 11 road},
    hsdfskhjfsdfsdf: {companyId: 3h3hr4jrkfk5k5kff, companyName: comp c, address: 10 road}    
}

我想让所有在工作清单中找不到工作的组织 我基本上想要交叉参考。

这是我的尝试:

    this.firebaseBaseUrl = "hiddenForStackOverflow";

    this.refOrg = new Firebase(firebaseBaseUrl + "/organisations");
    this.refJobs = new Firebase(firebaseBaseUrl + "/jobs");

    this.refOrg .once('value', function(snapshot: any) {

            snapshot.forEach(function(orgSnapshot: any) {

                var listOfOrganisations= orgSnapshot.val();

                // Not sure how to do this without looping through both lists, which could be very slow.

            }); 
        });

1 个答案:

答案 0 :(得分:0)

将子节点添加到将其与作业绑定的组织节点

organizations
   -company0
     companyName:
     address:
     jobs:
       k3resdfsfsdfsdf: true
       k8jsmnima90djis: true
   -company1
     companyName:
     address:
   -company2
     companyName:
     address:
     jobs:
       k989ijikakmsks: true

然后您可以查询作业节点不存在的组织。此Swift 3代码段仅返回company1:

orgRef.queryOrdered(byChild:"jobs").queryEqual(toValue: nil)
      .observe(.value, with: { snapshot in
             print(snapshot)      
});

OR

只需在每个公司节点中保留一个open_job_count:节点,如果没有打开任务,它将为0.然后查询open_job_count:0