【问题标题】:How to make a RecyclerView only with documents that have in their array a number larger than X如何仅使用数组中数字大于 X 的文档制作 RecyclerView
【发布时间】:2019-12-14 11:34:22
【问题描述】:

我的数据库如下:

如果我使用RecyclerView,我如何才能只检索schedules 数组中的数字为1908150000(例如)的文档?

我知道的一件事是,我可以使用以下代码查看具有上述条件的文档:

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference eventRef = db.collection("Events");
eventRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        for (DocumentSnapshot documentSnapshot : task.getResult()) {
            List<Long> list = (List<Long>) documentSnapshot.get("schedules");
            for (Long listItem : list) {
                if (listItem > 1908100000) {
                    Log.d("TAG", documentSnapshot.getId());
                    break;
                 }
             }
         }
    }
});

而且,使用query,我知道有函数whereArrayContains(),但它需要一个固定的数字来比较,因为在我的情况下我需要将它设为一个范围。

那么,是否可以将具有这种条件的文档放入RecyclerView

【问题讨论】:

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


    【解决方案1】:

    我知道的一件事是,我可以使用此代码查看具有上述条件的文档。

    这不是最好的方法,因为您正在获取 Events 集合中的所有文档,并且您执行过滤客户端。我这么说是因为 Firestore 中的所有内容都与您执行的读写次数有关。对于小型数据集,它会以不高的成本解决您的问题。

    而且,使用查询,我知道有函数 whereArrayContains() 但它需要一个固定的数字来比较,因为在我的情况下我需要将它设为一个范围。

    使用此数据库架构,不,您不能查询数据库并同时过滤范围。不幸的是,Firestore 目前没有这样的查询可以帮助您做到这一点。您可以使用 whereLessThanOrEqualTo()whereGreaterThanOrEqualTo() 方法过滤范围内的元素,但它仅适用于单个属性,而不适用于数组中存在的值。

    话虽如此,我鼓励您将此作为请求发送给 Firebase 团队。

    【讨论】:

    • 谢谢 Alex,您解决了我对 Firestore 实践的另一个疑问。
    猜你喜欢
    • 2016-08-18
    • 2022-06-19
    • 1970-01-01
    • 2021-02-17
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多