【问题标题】:How to fetch sub-collection data from firestore如何从 Firestore 获取子集合数据
【发布时间】:2019-07-16 03:48:37
【问题描述】:

我有一个名为 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());

                }

            }

        }
    });

或者我需要存储没有子集合吗?在 Realtime 中,我们使用 push 来生成 auto-id,但是在这里我不知道在将用户的 id 放在文档中之后创建密钥的等价物是什么。

【问题讨论】:

  • 请将您的数据库结构添加为屏幕截图并指明您想要获取的确切数据。

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


【解决方案1】:

假设您在 TripsInfo 集合中存储了带有 uid 参数的用户 ID,并且在“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()...

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2021-10-31
    • 2021-09-18
    • 2020-06-03
    • 2020-09-03
    • 2020-09-05
    • 2020-06-08
    • 2021-08-02
    • 2022-12-06
    相关资源
    最近更新 更多