共計 3344 個字符,預計需要花費 9 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
本篇文章給大家分享的是有關使用 MongoDB 怎么實現問卷 / 考試設計功能,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。
MongoDB 的特點
MongoDB 是一個面向文檔存儲的數據庫。在 MongoDB 中,一條記錄叫做 document(文檔),由類似于 JSON 結構的鍵值對組成。
由于類似于 MongoDB 直接存儲 JSON 的特性,MongoDB 天生適合作為存儲結構復雜的數據結構的介質。類似于問卷調查和考試這種需求,用 mysql 這種關系型數據庫實現起來太過復雜,效率低下;而如果使用 MongoDB 來實現的話,則會發現異常清晰簡單。
需求分析
在一張試卷中,會有很多個問題,問題的類型大體上可以分為單選題、多選題、判斷題、簡答題等。每一個問題又會有很多個選項,選項可以是文字描述也可以是圖片又或者圖文結合。
那么一張試卷的 JSON 格式應該大體上長成這樣:
當然這只是最簡單的數據結構,要完成一張試卷,還需要加入更多的屬性。
結構設計
我們采用自底向上的結構設計方式,先對每個選項的數據結構進行設計。
選項設計
public class Option {
/**
* 選項類型
*/
private Integer oType = 1;
/**
* 選項內容
*/
private String text;
/**
* 選項圖片
*/
private String img;
/**
* 是否正確答案
*/
private Boolean right;
/**
* 用戶是否選擇
*/
private Boolean selected;
...
選項類型 oType 用來標志選項是普通文本還是圖片或者圖文;right 用來標志這個選項是否是正確答案,用于自動判卷;selected 用來標志用戶有沒有選擇這個答案。
問題設計
public class Question extends MongoBean {
/**
* 數據的 id
*/
private String dataId;
/**
* 題目類型,1 判斷題;2 單選題;3 多選題
*/
private Integer qType;
/**
* 題目標題
*/
private String title;
/**
* 題目選項
*/
private List Option options;
/**
* 數據類型
* @see rmjk.enums.BizTypeEnum
*/
private Integer dataType;
/**
* 數據標題
*/
private String dataTitle;
/**
* 解析
*/
private String analysis;
/**
* 這題是否答對
*/
private Boolean right;
/**
* 這題答的時長
*/
private Long duration;
/**
* 這題的得分
*/
private Long points;
...
dataId 用于將這個問題同一個業務數據綁定,dataType 用來標志這個業務數據的類型,這兩個字段方便數據的擴展;dataTitle 是業務數據的標題;options 是這個問題的選項;analysis 問題的解析,用于用戶答題結束后的自查;right 用來記錄問題的正確與否。
新增問題
上層接口
提供新增問題的接口:
@PostMapping(/saveOrUpdateQuestion)
public JsonData saveOrUpdateQuestion(@RequestBody Question data) { questionService.saveOrUpdateQuestion(data);
return JsonData.success();}
QuestionService:
public void saveOrUpdateQuestion(Question data) { if (StringUtils.isEmpty(data.getId())) {// 新增
writer.insert(manager.getExamDataBase(), ExamConstant.QUESTION_COLLECT, data);
} else {// 修改
writer.updateDocument(data, ExamConstant.QUESTION_COLLECT);
}
}
DAO
Writer:
public void insert(String dataBase, String collect, MongoBean data) { if (data.getId() == null) { data.setId(BsonTool.uuid());
}
MongoCollection Document collection = getCollection(dataBase, collect);
collection.insertOne(Document.parse(JSONObject.toJSONString(data)));
public Document updateDocument(MongoBean data, String questionCollect) { Document filter = new Document();
filter.put(id , data.getId());
Document res = new Document();
res.put($set , BsonDocument.parse(JSONObject.toJSONString(data)));
update(manager.getExamDataBase(), questionCollect, filter, res);
return res;
public boolean update(String dataBase, String collect, Bson filter, Bson update) { MongoCollection Document collection = getCollection(dataBase, collect);
UpdateResult ur = collection.updateOne(filter, update);
return ur.getModifiedCount() 0;}
這樣后端的工作就全部完成了,接下來就是前端怎么給后端提供這樣的數據結構了。
前端實現數據結構
前端使用 vue 實現 JSON 的構造:
Modal title= 問題編輯 v-model= showEdit :closable= false :mask-closable= false
Form ref= question :model= question :rules= ruleValidate
FormItem label= 題目類型: prop= qType
Select v-model= question.qType > 這里綁定的 question 就是一個問題了。而一張試卷則是由多個問題,再加上試卷的額外屬性構成的。

在 question 上的 dataId 剛好就能綁定上試卷的 id
Exam exam = new Exam();
List Question questions = reader.findRandom(manager.getExamDataBase(), ExamConstant.QUESTION_COLLECT, new Document(), Question.class, no);
exam.setTitle(title);
exam.setDuration(dutation);
return exam;
以上就是使用 MongoDB 怎么實現問卷 / 考試設計功能,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。
向 AI 問一下細節