【问题标题】:How make complex query with FirestoreRecyclerAdapter?如何使用 FirestoreRecyclerAdapter 进行复杂查询?
【发布时间】:2019-02-15 10:14:04
【问题描述】:

我正在开发一个 Android 应用程序,我需要对我的 Firestore 数据库进行复杂查询并创建一个FirestoreRecyclerAdapter。要创建适配器,我需要一个 FirestoreRecyclerOptions 对象来输入整个查询。阅读文档后,我无法在查询中对不同参数使用 whereGreaterThanwhereLessThanoderBy 等方法。例如,如何从 db 中获取年龄大于/小于 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 的可能解决方案

【问题讨论】:

    标签: java android firebase google-cloud-firestore firebaseui


    【解决方案1】:

    说到 Firestore,有一些 query limitations

    查询限制

    Cloud Firestore 不支持以下类型的查询:

    • 在不同字段上使用范围过滤器进行查询,如上一节所述。

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

    编辑:

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

    编辑2:

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

    【讨论】:

    • 我已经意识到这些限制(我在问题中提到了它们)。有没有其他方法可以进行我需要的查询?
    • 它可以是一个解决方案,但 firestoreRecyclerOptions 对象将单个对象查询作为输入
    • 是的,您是对的,但是您将第二个查询传递给适配器,该查询返回的数据经过了两次过滤,对吧?
    • 你的意思是这样的吗?查询 q = db.collection(“Users”).whereGreaterThan(userWeight, 75);查询 x = q.whereLessThan(userAge, 15);比 fisrestoreRefyclerOptions 输入将是查询对象 x
    • 对不起,我必须使用 firebase-UI 库
    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多