如何从Firestore中获取子集合数据

时间:2019-02-22 05:17:21

标签: android firebase firebase-realtime-database google-cloud-firestore

我有一个名为TripInfo的集合,后面带有用户的ID,然后我为每个文档创建了带有自动生成ID的子集合。问题是我无法使用以下代码获取数据:

private void checkDataExistingDate() {
    db.collection("TripsInfo").document(UID).collection("Individual_Trip").document()
            .get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.getResult().exists()){
                DocumentSnapshot snapshot = task.getResult();

                Map<String, Object> map = snapshot.getData();
                for (Map.Entry<String, Object> entry : map.entrySet()) {

                        Log.d(Tag, "All data"+entry.getValue().toString());

                }

            }

        }
    });

还是我需要存储无子集合?在实时中,我们使用push来生成自动ID,但在这里我不知道在将用户ID放入文档中之后创建密钥的等效性。

1 个答案:

答案 0 :(得分:0)

假设您在TripsInfo集合中存储了带有uid参数的userid,并且在'TripsInfo'集合中还具有Individual_Trip作为子集合。您可以像这样获取子集合。

FirebaseFirestore.getInstance().collection("TripsInfo")
                .get()
                .addOnCompleteListener(
                        new OnCompleteListener<QuerySnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                if (task.isSuccessful()) {
                                    for (QueryDocumentSnapshot document : task.getResult()) {
                                        if (FirebaseAuth.getInstance().getUid().equalsIgnoreCase(document.getString("uid"))) {
                                            document.getReference()
                                                    .collection("Individual_Trip")
                                                    .get()
                                                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                                                        @Override
                                                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                                            list = task.getResult().toObjects(Individual_Trip.class);
                                                            showListOfRequest();
                                                        }
                                                    })
                                                    .addOnFailureListener(new OnFailureListener() {
                                                        @Override
                                                        public void onFailure(@NonNull Exception e) {
                                                            hideProgress();
                                                        }
                                                    });

                                            break;
                                        }
                                    }
                                }
                            }
                        });

FirebaseAuth.getInstance().getUid().equalsIgnoreCase(document.getString("uid"))

当您的'TripsInfo'集合中有多个数据时,此行用于检查用户ID。

您也可以为此使用whereEqualTo FirebaseFirestore.getInstance().collection("TripsInfo") .whereEqualTo("userId", "uid").get()...