javascript - 使用 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 代码的形式出现,但是解决这个问题的正确步骤是什么?我不知道下一步该做什么,我应该先做什么?或者你能指出我应该以这种方式或那种方式而不是目前的方式完成结构吗?
解决方案
从上面的评论中复制:
您可以计算每个学生的分数并将其存储在users
新字段的集合中score
。现在您可以通过对新score
字段进行排序来简单地查询前 N 个文档。
推荐阅读
- java - 如何在 Java 中识别文件类型?
- c# - 在 ASP.NET Core 中使用 datetime 返回 http 500 错误
- python - 从 .yml 创建的 Conda env 给出“意外错误”
- python-3.x - 按类别进行python操作并从文件中填充字典
- python - 在我的 LSTM 中添加一个线性层使得 PyTorch 中的验证损失猛增
- java - 如何获取我们自定义的 AlertDialog 的值?
- java - BadSqlGrammarException: 错误的 SQL 语法 [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE...] - 不同环境下的不同行为
- maven - 是否可以在没有 Testng 或 Junit 的情况下使用 Maven 在 Jenkins 中运行自动化测试?
- python - 1D ary 与 2D ary 中的每一行相交?重叠计数?
- c# - 如何使用 Selenium 和 C# 按值选择元素