Я работаю над проектом Angular, который обращается к базе данных Firebase Realtime через angularfire2.
У меня есть запросы, которые помогают мне избежать необходимости загружать весь узел для последующей фильтрации (поскольку мои узлы действительно тяжелые).
Например, для целей нумерации страниц я использую:
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);
}
Это дает мне эту ошибку:
Uncaught Ошибка: 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);
}
И этот дает:
Uncaught Ошибка: Query.startAt: Начальная точка былауже установлено (с помощью другого вызова startAt или equalTo).
Как отфильтровать и страницу набора записей без необходимости загрузки всех записей?