如何使用whereGreaterthan()过滤两个不同的字段来为Android构建firestore查询?

时间:2017-12-01 06:59:45

标签: java android firebase google-cloud-firestore

我需要在我的android firestore中过滤我从app获取的文档列表。这是查询。

  query = FirebaseFirestore.getInstance()
            .collection("students")
            .whereLessThan("mAge",25)
            .whereGreaterThan("mAge",20)
            .whereGreaterThan("mGrades",20);

但是,我在日志中收到错误:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {dsardy.in.acchebacche / dsardy.in.acchebacche.MainActivity}:java.lang.IllegalArgumentException:除whereEqualTo()之外的所有过滤器必须位于同一字段的所有位置。但是你有过滤' mAge'和' mGrades'

这可以实现吗?包含两个或多个大于某些值的字段的过滤器是一个重要且通用的查询,firestore必须要解决此问题。

1 个答案:

答案 0 :(得分:3)

Firestore允许链接多个where()方法来创建更具体的查询,但只能在同一个字段上。正如您可能在official documentation范围内看到的那样,禁止在不同字段上使用过滤器。

要实现您的目标,您需要使用.whereGreaterThan("mAge",20)查询数据库两次,使用.whereGreaterThan("mGrades",20)查询数据,然后使用Model.imageUrl查询数据,但不能在同一查询中使用它们。

实现它的另一种方法是存储一个可能适合查询的特殊字段,尽管在实际应用程序中,几乎不可能存储用户可能查询数据的每一种方式。