首页 > 解决方案 > Firebase Firestore 使用不同的字段 android 获取或查询

问题描述

如何获取不同字段的文档值?例如,我有一个带有 Message 的数据库,我将所有聊天数据存储在这个集合中。现在我想获取两个用户之间的所有聊天数据,按时间戳排序。
据我所知, firebase也引入了in操作符,但它是针对单场
Firestore 快照的。
在此处输入图像描述

代码片段

db.collection("Message")
                .whereEqualTo("from",mAuth.getCurrentUser().getUid()) //to is receiver UID
                .whereEqualTo("to",to)
                 ||    // Or "I need or in between" 
                .whereEqualTo("to",mAuth.getCurrentUser().getUid())
                .whereEqualTo("from",to)
                .orderBy("time_stamp", Query.Direction.ASCENDING).... 

简而言之,我需要在两个字段条件之间或两者之间获取数据库。
预期输出
从firestore获取登录用户和接收者之间的所有文档。(获取来自登录和接收者ID或来自接收者和登录用户的数据)。

我是初学者,请帮助我解决此问题,否则任何解决方法都可以。谢谢

标签: androidfirebasegoogle-cloud-firestore

解决方案


首先获取所有具有的文档,"from"==mAuth.getCurrentUser().getUid然后过滤掉具有"to"==to. 这是代码:

db.collection("Message")
                .whereEqualTo("from",mAuth.getCurrentUser().getUid)
                .orderBy("time_stamp", Query.Direction.ASCENDING)
                .get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                        List<DocumentSnapshot> allDocs = queryDocumentSnapshots.getDocuments();
                        List<DocumentSnapshot> requiredList = new ArrayList<>();
                        for(DocumentSnapshot d : allDocs){
                            if(/*Cast into required type.I'm assuming string*/((String)d.get("to")).equalsIgnoreCase(to)){
                                requiredList.add(d);
                            }
                        }
                        // requiredList contains the required documents
                        // do whatever you want here...
                    }
                });

如有必要,索引数据库。您可以检查任何所需索引的日志。


推荐阅读