【发布时间】: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