首页 > 解决方案 > 如何使用 OR-Query 和实时更新查询 Firestore

问题描述

我有一个这样的firestore查询:

docRef.whereEqualTo("A",1).whereEqualTo("B",3) 或 docRef.whereEqualTo("A",2).whereEqualTo("C",3)

由于 Firebase 中的单个查询无法做到这一点,因此我想在客户端合并它们。我在 SO 上找到了一个帖子,您只需使用任务对象并等待它们完成。但我真的很想拥有 ListenerRegistration 并使用该查询进行实时更新。获取组合或查询的生活更新的最佳方式是什么。

顺便说一句:这是我正在谈论的代码(取自https://stackoverflow.com/a/50132229

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query firstQuery = rootRef...
Query secondQuery = rootRef...

Task firstTask = firstQuery.get();
Task secondTask = secondQuery.get();

Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
         //Do what you need to do with your list
    }
});

标签: androiddatabasefirebasegoogle-cloud-firestore

解决方案


正如评论所讨论的那样,合并查询没有更好或更少的“hacky”,因为在每个查询中使用侦听器并以返回的方式处理结果。由于 Firestore 中的查询很浅,所有需要的查询,这种“额外的英里”,超出了直接可用的范围,听起来可能看起来“hacky”,但它们通常是唯一的解决方案更复杂的情况。

对于这种情况,实际上并没有真正好的或更好的选择,因此,总而言之,使用@DougStevenson 的选项可能对您有用,或者继续使用您的方法,以防它对您有用。


推荐阅读