【发布时间】:2021-11-16 10:57:57
【问题描述】:
好吧,这可能是一团糟。
我最近刚刚学习了 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 代表主题:math & 题号: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 字段进行排序来简单地查询前 N 个文档。 -
@AkshayJain...哇...太棒了。为什么我没有想到呢?非常感谢,Akshay...
-
没问题 :) 我复制了评论作为答案。如果它解决了您的问题,请接受答案。
标签: javascript firebase google-cloud-firestore