Firebase通过ID获取孙子代

时间:2019-08-27 03:46:55

标签: firebase angularfire2

我有一个非常简单的结构,其中有一个集合teachers

有多个teachers,每个teacher有多个students。 每个学生都有多个invoices

我如何退回invoices中的所有students作为老师的孩子? 甚至有可能吗?

我来自SQL背景,在研究Firebase如何执行某些操作时,我会头疼。但是我想这是由于没有使用NO-SQL数据库所致。

1 个答案:

答案 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
      }});