首页 > 解决方案 > 使用 Firestore 进行学生评分

问题描述

好吧,这可能是一团糟。

我最近刚刚学习了 Javascript 和 Firebase,我为我目前工作的学校有这个项目,学生可以在网站上进行考试。考试的答案键存储在 Firebase Firestore 中名为“answerkeys”的集合中。

我使用 Javascript 更改此“answerkeys”集合中的文档 ID,以便每个文档 ID 的命名如下:

collection /answerkey/
    math01 {
       answerKey : a,
       subject : math,
       questionNum : 01,
       score: 5
    },
    math02 {
       answerKey : b,
       subject : math,
       questionNum : 02,
       score: 15
    },
    ....,
    science01 {
       answerKey : b,
       subject : science,
       questionNum : 02,
       score: 10
    },
    science02 {
       answerKey : c,
       subject : science,
       questionNum : 02,
       score: 20
    }

所以文档 ID math01 代表主题:数学和问题编号:01。

我使用 subject: math 进行查询,所以每当数学考试时,我都会像这样查询它:

query(collection(db, "exam"), where("category", "==", "math")

当学生提交他们的答案时,它会像这样存储在他们的用户个人资料中:

collection /users/
  userID (generated by firebase) {
     firstName : Jeff,
     lastName : Kalimba,
     subject1 : math,
     subject2 : science,
     subject3 : english
     answer : {
                math01: a,
                math02: b,
                ...,
                science01: c,
                science02: a,
                ...,
                english01: e,
                english02: b,
                ...
              }
  }

现在我非常困惑如何进行评分。如果要求显示,比如说 1.000 名学生,说出前 25% 的名字,我应该如何解决这个问题?

我现在什至不确定我是否制作了正确的数据结构。而现在学生数据量实际上是 1.000 名学生。所以重做数据结构需要相当长的时间。如果可能的话,我想避免这种情况。

我现在想到的是查询主题 1 = 数学的所有名称。这根本不会有效,因为有些学生有科目 2 = 数学(因为我一开始错误地认为顺序并不重要)。但这是我目前拥有的。那么有没有一种有效的方法来获得评分,然后进入前 25%?

我不需要答案和建议以 JS 代码的形式出现,但是解决这个问题的正确步骤是什么?我不知道下一步该做什么,我应该先做什么?或者你能指出我应该以这种方式或那种方式而不是目前的方式完成结构吗?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


从上面的评论中复制:

您可以计算每个学生的分数并将其存储在users新字段的集合中score。现在您可以通过对新score字段进行排序来简单地查询前 N 个文档。


推荐阅读