【问题标题】: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_statusrequest_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,看看它是否可以帮助您解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 2022-10-14
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2012-04-20
      • 2019-12-29
      • 1970-01-01
      相关资源
      最近更新 更多