Получите данные из firestore, используя идентификатор документа - PullRequest
0 голосов
/ 29 мая 2020

У меня есть две коллекции в моей базе данных firestore, первая - это список всех документов (BlockList), а вторая - для пользователей. когда пользователь добавляет в закладки сообщение в приложении, отправьте только идентификатор этого сообщения в подгруппу (Избранное).

, так как я могу отобразить документы этой подгруппы из первой коллекции на основе ее идентификаторов.

image 1

image 2

firebaseFirestore.collection("Users")
                .document(userId).collection("Favorites").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    List<String> list = new ArrayList<>();
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        list.add(document.getId());
                    }
                    Log.d(TAG, list.toString());
                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });

Я использую этот код для доступа к списку идентификаторов вложенных коллекций, но я хочу знать, как его использовать чтобы получить документы, соответствующие этим идентификаторам, из основной коллекции (BlockList).

Ответы [ 2 ]

1 голос
/ 30 мая 2020

После l oop у вас уже есть список идентификаторов, просто просмотрите их l oop и найдите их в blockedList:

....
....
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getId());
}

//here loop through the list

for(int i = 0 ; i<list.size() ; i++){

//now refer to the id in the blocked list
firebaseFirestore.collection("BlockList").document(list.get(i)).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {

    .........

    });



}

......
......
0 голосов
/ 29 мая 2020
    userRef.document(reference)
                    .collection(favCollect)
                    .get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()) {
                                task.getResult()
                                        .getQuery()
                                        .addSnapshotListener((queryDocumentSnapshots, e) -> {
List<DocumentChange> documentChanges = queryDocumentSnapshots.getDocumentChanges();
                                    for (int i = 0; i < documentChanges.size(); i++) {

}

}

Таким образом вы можете получить идентификатор, который ищете

...