如何结合orderByKey()和orderByChild查询来分页过滤结果?

时间:2018-12-06 22:51:24

标签: firebase firebase-realtime-database angularfire2

我正在一个Angular项目中,通过angularfire2访问Firebase的实时数据库。

我有一些查询可以帮助我避免下载整个节点以供以后过滤(因为我的节点确实很重)。

例如,出于分页目的,我使用:

  getPaged(offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByKey().startAt(startKey.toString()).limitToFirst(offset + 1);
  }

为了过滤特定的键/值,我使用:

getForSupervisor(supervisor) {
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor);
}

但是现在,我需要对已经过滤的结果进行分页,我尝试过:

  getForSupervisorPaged(supervisor, offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor).orderByKey().startAt(startKey.toString()).limitToFirst(offset + 1);
  }

它给了我这个错误:

  

未捕获的错误:Query.orderByKey:您不能组合多个orderBy   电话。

此外,我已经尝试过:

  getForSupervisorPaged(supervisor, offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor).startAt(startKey.toString()).limitToFirst(offset + 1);
  }

这给了:

  

未捕获的错误:Query.startAt:起点已设置(通过   另一个对startAt或equalTo的调用。

如何过滤一组记录而不必下载所有记录?

0 个答案:

没有答案