Android Studio中Firestore按postDate范围查询并按postViews排序报错问题
问题解决方法
原因说明
Firestore的查询规则明确要求:只要你对某个字段使用了不等式过滤(whereGreaterThanOrEqualTo/whereLessThanOrEqualTo等),该字段必须作为orderBy的第一个排序字段。你当前的查询先按postViews排序,不符合这个规则,因此触发报错。
解决方案
方案1:调整排序顺序(推荐)
如果业务可以接受先按postDate排序、同日期的内容再按浏览量排序,直接调换两个orderBy的顺序即可:
query = database.collection("CustomerViews/Data/Post") .whereGreaterThanOrEqualTo("postDate", startDate) .whereLessThanOrEqualTo("postDate", endDate) .orderBy("postDate", Query.Direction.DESCENDING) .orderBy("postViews", Query.Direction.DESCENDING)
首次运行该查询时会触发索引缺失的报错,跟着报错提示点击链接一键创建对应复合索引即可正常使用。
方案2:客户端过滤(适合数据量较小的场景)
如果业务要求必须优先按postViews排序,无法调整排序优先级,就需要把postDate的过滤逻辑放到客户端执行:
- 移除查询中
postDate相关的不等式过滤条件,仅保留按postViews排序的逻辑 - 拿到全量查询结果后,在本地代码中遍历筛选出
postDate处于startDate和endDate范围内的条目即可
内容的提问来源于stack exchange,提问作者Sabir Syed
相关产品推荐
相关产品推荐

