Firestore如何实现指定值不存在时返回全集合数据的查询
实现方案
你需要先执行一次条件查询确认是否有匹配文档,再根据结果选择最终的查询传入Firestore UI适配器即可,示例代码如下:
// 构造条件查询 Query cityQuery = collectionReference.whereEqualTo("City", FirestoreConstants.CURRENT_CITY); cityQuery.get().addOnCompleteListener(task -> { if (!task.isSuccessful()) { Log.e(TAG, "查询失败: ", task.getException()); // 这里补充你自己的异常处理逻辑 return; } QuerySnapshot resultSnapshot = task.getResult(); Query useQuery; // 判断条件查询结果是否为空 if (resultSnapshot.isEmpty()) { // 无匹配城市的文档,使用全集合查询 useQuery = collectionReference; } else { // 有匹配结果,使用原条件查询 useQuery = cityQuery; } // 将最终查询传入UI适配器 // 如果你还未初始化适配器: FirestoreRecyclerOptions<你的数据模型类> options = new FirestoreRecyclerOptions.Builder<你的数据模型类>() .setQuery(useQuery, 你的数据模型类.class) .build(); // 后续初始化适配器、绑定到RecyclerView的逻辑照常编写 // 如果你已经初始化过适配器,可以直接更新配置即可: // adapter.updateOptions(options); });
注意事项
- 该方案会额外产生一次条件查询的读请求,按照Firebase计费规则,条件查询返回为空时仅会计费1次读操作,不会产生额外高额成本
- 如果你需要监听数据实时更新,可在拿到最终查询后再附加快照监听器即可,原有实时更新逻辑不受影响
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

