android - 如何使用 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
}
});
解决方案
正如评论所讨论的那样,合并查询没有更好或更少的“hacky”,因为在每个查询中使用侦听器并以返回的方式处理结果。由于 Firestore 中的查询很浅,所有需要的查询,这种“额外的英里”,超出了直接可用的范围,听起来可能看起来“hacky”,但它们通常是唯一的解决方案更复杂的情况。
对于这种情况,实际上并没有真正好的或更好的选择,因此,总而言之,使用@DougStevenson 的选项可能对您有用,或者继续使用您的方法,以防它对您有用。
推荐阅读
- react-native - Facebook 标签式 TextInput - React Native
- python - 第 11 行:AttributeError:列表实例没有属性“__index__”或“__int__”
- excel - 循环的大型电子表格比较。有更快的方法吗?
- angular - 没有 MockDialogRef 的提供者
- symfony - 使用 EntityType 显示选择时,无法从 Symfony 表单中保存实体
- javascript - 在 selenium python 中单击滑块按钮
- node.js - 让用户将 iframe 添加到他们的个人资料的常用方法?
- ruby-on-rails - 复选框不会显示在网页上,但不会出现错误
- c++ - 将常量指针推送到 std::stack
给出编译错误 - angular - 素数树表选择未按预期工作