我正在一个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的调用。
如何过滤和一组记录而不必下载所有记录?