首页 > 解决方案 > 如何从 Firestore Flutter 中的其他“xyz”集合访问某个“abc”集合中的其他文档的特定字段?

问题描述

我被困在一个颤振项目之间,有人可以帮我解决这个问题吗?对于这个项目,我使用 firestore 作为数据库。

项目快速总结: 一个应用程序 - > 两种不同的帐户类型。(说它是学生导师

导师 - 生成一个二维码。(每当生成二维码时,都会创建一个名为“TotalClassesTook”的字段并维护一个值,该值是该特定导师生成的二维码数量)

学生 - 扫描 QR 码。(每当扫描 QR 码时,都会创建一个名为“TotalClassesAttended”的字段并维护一个值,即扫描的 QR 码数量)

我现在的要求: 现在在学生帐户类型中(在“学生”集合中),我如何获取“TotalClassesTook”字段值(在名为“导师”的不同集合中)并计算该特定学生的出勤率并将其显示在学生帐户中?

如果可能的话,请告诉我方法

FireStore 项目结构

学生

导师

标签: androidfirebaseflutterdartgoogle-cloud-firestore

解决方案


就像我在评论中提到的那样,我认为您的逻辑有缺陷,在您共享的结构中,导师和学生之间没有联系,除了tutorid在学生集合中为空,因此无法知道要查看哪个导师文档每个学生。

尽管您应该自己想出一个解决方案,因为只有您知道您的应用程序的要求是什么,但我可以为您提供一些关于如何做到这一点的见解:

首先,您需要在学生和所有导师之间创建链接,假设导师只能教一门课(如果这不是真的,您可以创建第二个标识符,例如类似的类名),您可以创建学生的子集合其中每个子文档将充当该特定班级的学生信息,因此您将具有以下结构:

students Collection
    email
    fullName
    mobileNumber
    role
    rollNumber
    studentClass Subcolletion
        tutorId
        totalClassesAttended
        present

此时,您可以获取 StudentClass 文档totalClassesAttended来计算出勤率,如下所示:

FirebaseFirestore.instance
                 .collection('students')
                 .doc('YOUR_STUDENT_ID')
                 .collection('studentClass')
                 .where('tutorId', isEqualTo: 'YOUR_TUTOR_ID')
                 .get()
                 .then((snapshot) {
                     //this will be the value you want
                     String classesAttended = snapshot.data['totalClassesAttended'].toString();
                 });

推荐阅读