将startAfter(documentSnapshot)与orderBy()一起使用时发生意外行为

时间:2020-04-26 03:02:56

标签: android firebase google-cloud-firestore

这是我的代码:

    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()结合使用。我应该只在starAfter(object)中使用orderBy吗?如果是这样,还有什么选择?

编辑:

好吧,事实证明,将startAfter(documentSnapshot)与orderBy()一起使用没有问题,问题是我执行了另一个使订单混乱的查询。

所以,我正在做的是:首先从用户文档内的子集合中获取组的ID,然后对获取的ID进行排序。 然后,我使用ID的有序列表通过 whereIn()从其顶层集合“组”中获取实际组:

Query groupsQuery = repository.getGroupsCollRef().whereIn(FirebaseRepository.GROUP_ID_FIELD_KEY, groupsIds);

我希望从该查询中得到的文档与在中的顺序相同 “ groupsIds”列表。我该如何告诉Firestore做到这一点?

另一种思路是通过循环'groupsIds'一次获取一个文档。但是我想每次通过单查询获取10个文档。

0 个答案:

没有答案