这是我的代码:
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个文档。