Firebase 如何实现Firestore+;中的OR子句的等价项;振作起来,保持我想要的秩序?
我有一个flatter应用程序,它成功地显示了集合中文档的列表视图。但现在我需要一些过滤器 我知道Firestore中并没有OR子句(尽管我认为应该有),所以我读到,根据需要的OR条件的值的多少,我可以通过两个或多个查询获得类似的结果 好的,我理解逻辑,但我拒绝相信这是一个最佳的解决方案。尽管如此,我决定在我的应用程序中实现该解决方案,但仍然无法取得成功 想象一个场景:我有一个“雇员”文档集合。很多有4种类型的员工:Firebase 如何实现Firestore+;中的OR子句的等价项;振作起来,保持我想要的秩序?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个flatter应用程序,它成功地显示了集合中文档的列表视图。但现在我需要一些过滤器 我知道Firestore中并没有OR子句(尽管我认为应该有),所以我读到,根据需要的OR条件的值的多少,我可以通过两个或多个查询获得类似的结果 好的,我理解逻辑,但我拒绝相信这是一个最佳的解决方案。尽管如此,我决定在我的应用程序中实现该解决方案,但仍然无法取得成功 想象一个场景:我有一个“雇员”文档集合。很多有4种类型的员工: [Production, Administrative, Security,
[Production, Administrative, Security, External]
我的应用程序假装允许根据员工类型进行筛选。因此,如果在某一时刻我只想要生产和管理类型,我必须:
Query q1 = collectionReference.where('type', isEqualTo: 'Production').orderBy('name');
Query q2 = collectionReference.where('type', isEqualTo: 'Administrative').orderBy('name');
QuerySnapshot querySnapshot1 = await q1.getDocuments();
QuerySnapshot querySnapshot2 = await q2.getDocuments();
…那么我如何才能将两个查询合并为一个呢
而且,由于数据库中有数千名员工,我使用limit(20)
和startAfter(Document)
子句对他们进行分页。理想的情况是快照为我提供了正确数量的文档、正确的条件和正确的顺序(名称)
附录:在Java中,您可以尝试下面的方法,但Dart呢
Task task1 = employees.whereLessThan("type", "Production") .orderBy("name") .get();
Task task2 = employees.whereGreaterThan("type", "Production") .orderBy("name") .get();
Task<List<QuerySnapshot>> allTasks = Tasks.whenAllSuccess(task1, task2);
allTasks.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
@Override
public void onSuccess(List<QuerySnapshot> querySnapshots) {
...
}
}
task1=employees.whereLessThan(“类型”、“生产”).orderBy(“名称”).get();
任务task2=员工。其中大于(“类型”、“生产”).orderBy(“名称”).get();
Task allTasks=Tasks.whenAllSuccess(task1,task2);
allTasks.addOnSuccessListener(新OnSuccessListener(){
@凌驾
成功时公共无效(列出查询快照){
...
}
}
我认为您的问题是承认in查询迫使您陷入这种情况,这是不可取的,但绝对必要的。您唯一的求助方式(不使用其他数据库)现在是使用您的解决方案,并向Firebase支持部门提交一个功能请求。感谢Doug的快速响应,但我的解决方案尚未成功。因此您遇到了以下问题:1)执行N个查询,2)等待每个查询完成,3)将结果收集到单个列表中,4)根据需要在应用程序中对整个列表进行排序?是的,问题在3和4中。请编辑您的问题,以包含最小的代码,以复制您尝试合并查询结果的代码。正如您可能已经注意到的那样,在评论中发布重要代码是非常不可读的。我认为您的问题是承认in查询迫使您进入这种情况,这是不可取的,但绝对是必需的。目前,您唯一的办法(不使用其他数据库)是使用您的变通方法,并向Firebase支持部门提交功能请求。谢谢Doug的快速回复,但我的解决方案还没有成功,tho。所以你很难1)执行N个查询,2)等待每个查询完成,3)将结果收集到单个列表中,4)根据需要在应用程序中对整个列表进行排序?是的,问题在3和4中。请编辑您的问题,使其包含最小的代码,以复制您尝试合并查询结果的代码。正如您可能已经注意到的那样,在注释中发布重要代码是非常不可读的。