我有一个非常简单的结构,其中有一个集合teachers
。
有多个teachers
,每个teacher
有多个students
。
每个学生都有多个invoices
。
我如何退回invoices
中的所有students
作为老师的孩子?
甚至有可能吗?
我来自SQL背景,在研究Firebase如何执行某些操作时,我会头疼。但是我想这是由于没有使用NO-SQL数据库所致。
答案 0 :(得分:1)
我将假设您正在使用Firestore并假定以下结构:
“教师”集合,其中包含教师列表作为文档
每个老师都有 包含学生列表作为文档的“学生”子集合
每个学生将有 包含学生列表作为文档的“发票”子集合
针对特定教师的特定学生的特定发票:
db.collection("teachers").doc(teacherUID)
.collection("students").doc(studentUid)
.collection("invoices").doc(invoiceUid)
.get().then(function(doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}}).catch(function(error) {
console.log("Error getting document:", error);
});
对于特定教师的特定学生的所有发票:
db.collection("teachers").doc(teacherUID)
.collection("students").doc(studentUid)
.collection("invoices")
.get().then(function (querySnapshot) {
querySnapshot.forEach(function (invoice) {
console.log(invoice.id, ' => ', invoice.data());
}});
现在,对于所有学生的针对特定老师的特定发票:
首先查询所有学生,然后获取特定发票或查询所有发票,如上所示;
db.collection("teachers").doc(teacherUID)
.collection("students")
.get().then(function (querySnapshot) {
querySnapshot.forEach(function (student) {
console.log(student.id, ' => ', student.data());
//ToDo: get the student's invoice/s
}});