服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB实现问卷/考试设计功能

MongoDB实现问卷/考试设计功能

2020-05-26 15:55我的小熊不见了 MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。。本文给大家分享MongoDB实现问卷/考试设计,需要的朋友可以参考下

MongoDB的特点

MongoDB是一个面向文档存储的数据库。在MongoDB中,一条记录叫做document(文档),由类似于JSON结构的键值对组成。 

MongoDB实现问卷/考试设计功能

由于类似于MongoDB直接存储JSON的特性,MongoDB天生适合作为存储结构复杂的数据结构的介质。类似于问卷调查和考试这种需求,用mysql这种关系型数据库实现起来太过复杂,效率低下;而如果使用MongoDB来实现的话,则会发现异常清晰简单。

需求分析

在一张试卷中,会有很多个问题,问题的类型大体上可以分为单选题、多选题、判断题、简答题等。每一个问题又会有很多个选项,选项可以是文字描述也可以是图片又或者图文结合。

MongoDB实现问卷/考试设计功能

那么一张试卷的JSON格式应该大体上长成这样:

MongoDB实现问卷/考试设计功能

当然这只是最简单的数据结构,要完成一张试卷,还需要加入更多的属性。

结构设计

我们采用自底向上的结构设计方式,先对每个选项的数据结构进行设计。

选项设计

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Option {
 /**
  * 选项类型
  */
 private Integer oType = 1;
 
 /**
  * 选项内容
  */
 private String text;
 
 /**
  * 选项图片
  */
 private String img;
 
 /**
  * 是否正确答案
  */
 private Boolean right;
 
 /**
  * 用户是否选择
  */
 private Boolean selected;
 ...

选项类型 oType 用来标志选项是普通文本还是图片或者图文; right 用来标志这个选项是否是正确答案,用于自动判卷; selected 用来标志用户有没有选择这个答案。

问题设计

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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 用来记录问题的正确与否。

新增问题

上层接口

提供新增问题的接口:

?
1
2
3
4
5
@PostMapping("/saveOrUpdateQuestion")
public JsonData saveOrUpdateQuestion(@RequestBody Question data) {
 questionService.saveOrUpdateQuestion(data);
 return JsonData.success();
}

 

QuestionService:

?
1
2
3
4
5
6
7
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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的构造:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<Modal id="codetool">

 

这里绑定的 question 就是一个问题了。而一张试卷则是由多个问题,再加上试卷的额外属性构成的。

MongoDB实现问卷/考试设计功能

在 question 上的dataId刚好就能绑定上试卷的id

?
1
2
3
4
5
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实现问卷/考试设计功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

原文链接:https://segmentfault.com/a/1190000020864018

延伸 · 阅读

精彩推荐
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25