java - 如何使用 FirestoreRecyclerAdapter 进行复杂查询?

标签 java android firebase google-cloud-firestore firebaseui

我正在开发一个 Android 应用程序,我需要对我的 Firestore 数据库进行复杂的查询并创建一个 FirestoreRecyclerAdapter。要创建适配器,我需要一个接受输入整个查询的 FirestoreRecyclerOptions 对象。阅读文档后,我无法在查询中对不同参数使用方法 whereGreaterThanwhereLessThanoderBy 等。例如,如何从数据库中获取年龄大于/小于 AND 体重大于/小于的用户?

例如,我的 firestore 数据库中的文档结构是:

Users --->UserID--->userName(String)
            --->userAge(number)
            --->userHeight(number)
            --->userWeight(number)

FirebaseFirestore db;

db = FirebaseFirestore.getInstance();

RecyclerView recyclerView;

recyclerView = (RecyclerView)findViewById(R.id.recyclerViewID);
.
.
.

Query query = db.collection("Users").//the complex query that i need

FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
            .setQuery(query, User.class)
            .build();

adapter = new UsersAdapter(options, this);//get in input options and the context

recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

编辑:我上一条回答 1 的评论中的一个可能的解决方案

最佳答案

有一些query limitations谈到 Firestore:

Query limitations

Cloud Firestore does not support the following types of queries:

  • Queries with range filters on different fields, as described in the previous section.

因此,您无法在不同属性上使用 whereGreaterThan()whereLessThan() 方法在范围过滤器上查询数据库并将其传递给适配器。

编辑:

此问题的一个可能解决方案是在客户端过滤您的记录两次。首先使用第一个属性查询数据库,然后使用第二个属性查询数据库。不幸的是,您无法一次性实现这一目标。

编辑2:

解决方案是使用第一个查询查询数据库,获取相应的元素,使用第二个查询再次查询数据库并获取相应的元素,然后在客户端合并结果。现在数据库中的元素被过滤了两次。将这些元素的列表传递给适配器,仅此而已。请注意,在使用此解决方案时,您不能再使用 Firebase-UI 库,但您可以通过这种方式对项目进行两次过滤。

关于java - 如何使用 FirestoreRecyclerAdapter 进行复杂查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54707050/

相关文章:

ios - 为什么TableView、TableCell不出现?

java - 如何在 testet 方法中编写带有断言的单元测试?

android - 根据变化上传文件的智能方式

java - 是否可以通过编程方式关闭 Android 设备上的 USB 存储?

android - 电话API无效

android - 从 firebase 检索 hashmap 以填充 FirebaseRecycler,null HashMap

java - Selenium Java : How to get current ChromeDriver instance's user directory and version using ChromeCapabilities

java - Maven使用ftp进行war上传

java - JPA 2——在 CriteriaQuery 中使用@ElementCollection

javascript - 使用 JS 在 html 中显示正确的 firebase 存储图像