【问题标题】:The results are filtered in a multiple query on firebase结果在 firebase 上的多个查询中过滤
【发布时间】:2018-10-10 22:48:04
【问题描述】:
大家好,我对 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;
对正确过滤结果有帮助吗
【问题讨论】:
标签:
javascript
typescript
firebase
angular5
【解决方案1】:
您只能在查询中使用一个 orderByChild() 子句,因此您的第二个子句似乎覆盖了第一个子句,而您只是得到带有 request_status===true 的子句。
来自documentation:
查询一次只能按一个键排序。调用 orderByChild()
在同一个查询上多次抛出错误
我的建议是重构您当前的数据结构以允许更简单的查询,或者使用连接requests_receiveing_status 和request_status 的新第三个字段,他们在这个连接的字段上执行您的查询。像这样的:
{
"requests_receiving_status_and_status": "false_true";
}
并像这样查询它:
let query = ref.orderByChild('requests_receiving_status_and_status').equalTo('false_true');
现在,我知道这看起来很老套且性能不佳,但它实际上是 Firebase 的有效方法。
但是,如果您更喜欢更简洁的解决方案,请尝试将您的对象分隔在两个单独的列表中,一个用于 requests_receiving_status true 而另一个用于 false ,它们使用query = ref.orderByChild('requests_status').equalTo(true); 仅搜索虚假的。它增加了冗余,但它是 NoSql 数据库的另一种有效方法。
另外,请查看this video,看看它是否可以帮助您解决这个问题。