在Meteor中仅显示MongoDB集合中的特定于用户的项目

时间:2017-04-02 02:51:04

标签: javascript mongodb meteor

我是Meteor的新手,为教师创建一个流星网络应用程序,以便他们跟踪他们教授的课程和每个班级的学生。登录后,教师会看到他们亲自教授的所有课程的运行列表,并且能够选择每个单独的课程以查看该特定班级中的学生列表,并可选择删除,编辑或加。然后,教师将能够选择单个学生的姓名,这将使他们进入一个页面,教师可以在该页面上传与他们选择的特定学生相对应的文档(pdf,word文档等)。我遇到的问题是我究竟能够显示,添加和编辑适用于每位教师的信息,因为会有很多教师使用该应用程序,每个教师都有不同的班级和学生。我有一个课程和学生的单一集合,但似乎无法围绕如何只显示与当前登录的教师相对应的项目。最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

教师收藏可以有他们教授的一系列课程。

类集合可以有一个对象数组。每个对象都有一名教师和一组学生

教师收藏

teacher [
classes: {class_id1, class_id2, class_id3}
]

课程集合

classes [
{
 class: history
  {teacher: teacher_id1
   children: { childid1, child_id2, child_id3 }
  }
 {teacher: teacher_id2
  children: { child_id1, child_id2, child_id3 }
 }
},
{
 class:geography {
next iteration
}

} ]

您可以通过为教师班级学生组合命名文件夹来管理文件上传

答案 1 :(得分:0)

你说:

  

我有一个班级和学生的单一集合

听起来你的意思是1个收集总数(到目前为止),而不是每个收集课程和学生。

这个问题非常重要,因为您可能还想处理:

  1. 一位老师教授一门超过1x /天的某一科目
  2. 超过1名教师可以教授一门课程
  3. 一个学期结束,并且有一整套新的教师/班级/学生关系
  4. 如果我对此进行建模,我将从这些集合开始:

    1. 教师
    2. 受试者
    3. 学生
    4. 注意我列出了“科目”而不是“班级”。课程将接下来。一个主题可能是“历史4”,它带有一本教科书,可能还有一些现有的测试和家庭作业,并且年复一年地提供。或者每个学期可能有2名教师教授历史4。

      上述每个集合代表的概念比一个学期更“耐用”。一位老师(希望)在学校里有很长的职业生涯。学生可能会在那里4年。科目,虽然它们可能会随着时间的推移而发展,但保持相对稳定。

      下一步是开始在所有这些集合中建立关联。这里是“课堂”发挥作用的地方。为了避免使用保留字,我们称之为“schoolClass”。

      学校课程是学校向学生提供固定课程的学科。例如2017学年,第一学期。由老师教授,学生参加。由于持久集合中的每个项目都有一个_id,现在您可以一次性完成关联:

      {
          subjectId: 'abc123',
          teacherId: 'def456',
          students: ['ghi789', 'xxx123', ... ],
          year: 2017,
          semester: 1,
          schedule: [
              {
                  day: 'M',
                  time: '1030'
              },
              {
                  day: 'Th',
                  time: '1500'
              }
          ]
      }
      

      这有意义吗?这解决了我上面提到的所有问题。它提供了良好的灵活性,并在一个主题和在预定时间提供给学生的主题之间保持重要的区别。

      还有那里的时间表(方便),表明该课程在该学期满足2x /周。

      现在您可以进行查询:

      1. 从老师开始
      2. 抓住他们的_id
      3. 使用teacherId = _id搜索schoolClass集合,并按学年和学期过滤
      4. 你会得到一个阵列。数组中的每个项目都会为您提供与主题的关联(因此您可以显示历史记录4或数学1或其他内容)以及学生列表。

        您可以对学生进行迭代,并使用他们的_id查询学生集合以显示他们的姓名。现在,您可以通过schoolClass和student ID为该班级的学生创建上传文档的关联。

        你可能想要那些上传文件的另一个集合。每个项目可能如下所示:

        {
            schoolClassId: 'zzz789',
            studentId: 'ghi789',
            documents: [] // however you want to handle that...
        }
        

        从关系数据库借用一个术语,那些id(schoolClassId,studentId)被称为外键。他们只是将引用设置回另一个集合中的项目。

        要使一切正确和有效,这将是一项相当大的工作,但我认为它将为您提供很大的灵活性并解决您的要求。