久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

使用MongoDB怎么實現問卷/考試設計功能

126次閱讀
沒有評論

共計 3344 個字符,預計需要花費 9 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

本篇文章給大家分享的是有關使用 MongoDB 怎么實現問卷 / 考試設計功能,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

MongoDB 的特點

MongoDB 是一個面向文檔存儲的數據庫。在 MongoDB 中,一條記錄叫做 document(文檔),由類似于 JSON 結構的鍵值對組成。 

使用 MongoDB 怎么實現問卷 / 考試設計功能

由于類似于 MongoDB 直接存儲 JSON 的特性,MongoDB 天生適合作為存儲結構復雜的數據結構的介質。類似于問卷調查和考試這種需求,用 mysql 這種關系型數據庫實現起來太過復雜,效率低下;而如果使用 MongoDB 來實現的話,則會發現異常清晰簡單。

需求分析

在一張試卷中,會有很多個問題,問題的類型大體上可以分為單選題、多選題、判斷題、簡答題等。每一個問題又會有很多個選項,選項可以是文字描述也可以是圖片又或者圖文結合。

使用 MongoDB 怎么實現問卷 / 考試設計功能

那么一張試卷的 JSON 格式應該大體上長成這樣:

使用 MongoDB 怎么實現問卷 / 考試設計功能

當然這只是最簡單的數據結構,要完成一張試卷,還需要加入更多的屬性。

結構設計

我們采用自底向上的結構設計方式,先對每個選項的數據結構進行設計。

選項設計

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 就是一個問題了。而一張試卷則是由多個問題,再加上試卷的額外屬性構成的。

使用 MongoDB 怎么實現問卷 / 考試設計功能

在 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 怎么實現問卷 / 考試設計功能

以上就是使用 MongoDB 怎么實現問卷 / 考試設計功能,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計3344字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 上思县| 犍为县| 大竹县| 宣汉县| 古田县| 光山县| 叶城县| 双峰县| 巴青县| 贵州省| 三亚市| 海安县| 临西县| 夹江县| 太康县| 千阳县| 方城县| 承德市| 怀化市| 无为县| 礼泉县| 平利县| 洮南市| 荆州市| 志丹县| 四子王旗| 桦南县| 郑州市| 甘孜县| 清涧县| 五台县| 呼伦贝尔市| 亚东县| 台江县| 泽库县| 南岸区| 余江县| 乌兰察布市| 阿瓦提县| 会昌县| 格尔木市|