大家好我在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;
是否有任何帮助正确过滤结果
答案 0 :(得分:0)
您的查询中只能使用一个request_status===true
子句,因此看起来您的第二个子句会覆盖第一个子句,而您只是使用requests_receiveing_status
获得的子句。
查询一次只能按一个键排序。调用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,看看它是否有助于您解决此问题。