结果在firebase上的多个查询中进行过滤

时间:2018-04-30 19:53:28

标签: javascript typescript firebase angular5

大家好我在firebase列表中遇到多个查询问题 此查询按这些查询过​​滤请求 但它给我带来了三个结果并且正确的只有两个结果

            this.all_being_executed = this.fdb.list('main_requests', ref => {
              let query = ref.orderByChild('requests_receiving_status').equalTo(false);
                  query = ref.orderByChild('requests_status').equalTo(true);
              return query;
        }).valueChanges();
        return this.all_being_executed;

enter image description here

是否有任何帮助正确过滤结果

1 个答案:

答案 0 :(得分:0)

您的查询中只能使用一个request_status===true子句,因此看起来您的第二个子句会覆盖第一个子句,而您只是使用requests_receiveing_status获得的子句。

来自documentation

  

查询一次只能按一个键排序。调用orderByChild()   多次在同一个查询上抛出错误

我的建议是重构您当前的数据结构以允许更简单的查询,或使用连接request_status{ "requests_receiving_status_and_status": "false_true"; } 的新的第三个字段,它们在此连接字段上进行查询。像这样:

let query = ref.orderByChild('requests_receiving_status_and_status').equalTo('false_true');

并像这样查询:

query = ref.orderByChild('requests_status').equalTo(true);

现在,我知道这似乎是hacky和非高效的,但它实际上是Firebase的有效方法。

但是,如果您更喜欢更清晰的解决方案,请尝试在两个单独的列表上分隔您的对象,一个用于requests_receiving_status,另一个用于假的,它们仅使用class JobList extends Component { onJobDetails = (job) => { this.props.navigate('JobDetails', job); } render() { const { navigation } = this.props; var renderJobs = () => { return this.props.jobs.map((job) => { return ( <JobItem key={job._id} title={job.title} shortDescription={job.shortDescription} logo={job.avatar} company={job.company} id={job._id} dispatch={this.props.dispatch} onPress={() => this.onJobDetails(job)} /> ) }) } return ( <View style={styles.container}> <ScrollView> {renderJobs()} </ScrollView> </View> ); } }; 搜索错误的列表。它增加了冗余,但它是NoSql数据库的另一种有效方法。

另外,请查看this video,看看它是否有助于您解决此问题。