Получение Firebase Firestore или запрос с другим полем android - PullRequest
0 голосов
/ 08 мая 2020

Как получить в документах значения разных полей? Например, у меня есть база данных с сообщением, и я храню все данные чата в этой коллекции. Теперь я хочу получить все данные чата между двумя пользователями, отсортировав их по отметке времени.
Насколько я знал из здесь , в firebase также введен оператор in, но он для одного поля
Снимок Firestore .
enter image description here

Фрагмент кода :

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. (Получить данные, из которых выполнен вход, а в - идентификатор получателя, или из - получатель, а в регистрируется в пользователе).

Я новичок, пожалуйста, помогите мне решить эту проблему, или подойдет любое решение. Спасибо

1 Ответ

0 голосов
/ 08 мая 2020

Сначала выберите все документы с "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...
                    }
                });

Индексируйте базу данных, если необходимо. Вы можете проверить журналы на наличие любого необходимого индекса.

...