/ 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的所有学期。现在如何访问所有课程名称?
答案 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());
}
}
});
}
如果仍有疑问,请告诉我。快乐的编码