【问题标题】:How to query firestore with an OR-Query and realtime updates如何使用 OR-Query 和实时更新查询 Firestore
【发布时间】:2020-10-01 16:16:51
【问题描述】:

我有一个这样的 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
    }
});

【问题讨论】:

  • 为每个查询添加一个监听器,并让它们都调用一个通用函数来处理每个查询结果。您的代码应该准备好以任何顺序、任何速率接收结果。
  • 你能详细说明一下吗?我想我使用了一种类似的方法,这对我来说真的很老套。我有一个全局 TreeSet,我将每个查询的结果推送到其中。然后,在两个回调中,我返回 TreeSet,默认情况下没有任何重复项。但是我必须保持全局设置?认为这不是您所指的。但顺便说一句。感谢您提供关于云功能的真正精彩的 YouTube 视频。我第一次不得不使用 nodejs 和 firebase,你拯救了我的一天。真的很重要。
  • 我认为没有比这更老套的方法了。

标签: android database firebase google-cloud-firestore


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 2021-04-27
    • 2021-11-24
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多