在QueryDocumentSnapshot中获取集合的所有文档

时间:2019-12-28 00:14:25

标签: java android google-cloud-firestore

enter image description here

/ Info / Semestre1 / Courses / course1是我的完整数据库参考。 我正在尝试访问所有学期的所有课程名称。

 db.collection("Courses").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {

                        for (QueryDocumentSnapshot document : task.getResult()) {





                            }

                          // Log.d(TAG, document.getId() + " => " + document.getData());



                        }



            }
        });


    }


I

我上了Info的所有学期。现在如何访问所有课程名称?

2 个答案:

答案 0 :(得分:2)

我认为您在问题中的查询实际上是错误的。根据我在屏幕快照中看到的内容,要获得所有学期,您可以执行以下操作:

db.collection("Info").get()

然后,要在一个学期下嵌套的子集合中获取某个特定学期的所有课程,则需要这样一个全新的查询:

String courseId = ...  // changes as you iterate the courses in Info
db.collection("Info").document(courseId).collection("Courses").get()

使用现有的数据库结构无法一次查询所有的学期和课程。 Firestore查询很浅,这意味着它们根本不考虑子集合。每个子集合都需要有自己的单独查询。

答案 1 :(得分:1)

您正在做的错误与我在详细了解Firestore时所犯的错误相同。

所以您要做的第一个错误是直接访问“课程”集合

如果要访问“课程”集合是不可能的,那么必须先遍历所有集合和文档。

例如:collection1 / doc1 / collection2 / doc2 / collection3

现在,如果您要访问collection3的数据,则查询就像

collection1.doc()。collection2.doc2()。collection3.get(),然后您的列表器只是基本的了解,然后再为您提供答案。

您现在遇到的问题

 db.collection("info").document("sem-id").collection(Courses).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {

                    for (QueryDocumentSnapshot document : task.getResult()) {





                        }

                      // Log.d(TAG, document.getId() + " => " + document.getData());



                   }

        }
    });


}

如果仍有疑问,请告诉我。快乐的编码