Неожиданное поведение при использовании startAfter (documentSnapshot) с orderBy () - PullRequest
0 голосов
/ 26 апреля 2020

Вот мой код:

    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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...