Вот мой код:
Query query = repository.getUserDocRef()
.collection(getGroupsCollectionKeyFromCategory(groupsCategory));
if (filter.getType() != GroupsFilter.TYPE_NO_FILTER) {
query = query.whereEqualTo(FirebaseRepository.GROUP_TYPE_FIELD_KEY, filter.getType());
}
if (universityInfo.getUniversityIndex() != UniversityInfo.NO_SELECTION_UNIVERSITY_INDEX) {
query = query.whereEqualTo(FirebaseRepository.GROUP_UNIVERSITY_INDEX_FIELD_KEY, universityInfo.getUniversityIndex());
}
if (universityInfo.getCollegeIndex() != UniversityInfo.NO_SELECTION_COLLEGE_INDEX) {
query = query.whereEqualTo(FirebaseRepository.GROUP_COLLEGE_INDEX_FIELD_KEY, universityInfo.getCollegeIndex());
}
if (universityInfo.getYear() != UniversityInfo.NO_SELECTION_YEAR) {
query = query.whereEqualTo(FirebaseRepository.GROUP_YEAR_FIELD_KEY, universityInfo.getYear());
}
query = query.orderBy(FirebaseRepository.DOCUMENT_TIME_STAMP_FIELD_KEY, Query.Direction.DESCENDING)
.limit(Prefs.MAX_GROUPS_LOADED_PER_QUERY);
if (finalContinueLoading && lastLoadedGroupDocument != null/*In case of failure*/) {
query = query.startAfter(lastLoadedGroupDocument);
}
Проблема в том, что когда я получаю этот запрос, полученные документы упорядочиваются случайным образом. Есть причина почему? В документации https://firebase.google.com/docs/firestore/query-data/query-cursors#use_a_document_snapshot_to_define_the_query_cursor не упоминается о сочетании startAfter (documentSnapshot) с orderBy (). Должен ли я использовать orderBy только со starAfter (объект)? Если это так, то какая альтернатива?
Редактировать:
Что ж, оказалось, нет проблем с использованием startAfter (documentSnapshot) с orderBy (), проблема в том, что я делаю еще один запрос, который портит порядок.
Итак, я делаю так: сначала выбираются идентификаторы групп из подгруппы внутри пользовательского документа, упорядоченные идентификаторы упорядочиваются. Затем я использую этот упорядоченный список идентификаторов, чтобы получить фактические группы из их «групп» коллекции верхнего уровня, используя whereIn () :
Query groupsQuery = repository.getGroupsCollRef().whereIn(FirebaseRepository.GROUP_ID_FIELD_KEY, groupsIds);
Я хочу, чтобы полученные документы из этот запрос должен быть в том же порядке, что и в списке 'groupsIds'. Как я могу сказать FireStore сделать это?
Еще один подход заключается в том, чтобы получать документы по одному, зацикливая 'groupsIds'. Но я хочу каждый раз получать по 10 документов с запросом sigle.