MongoDB快速入门及其SpringBoot实战

MongoDB快速入门及其SpringBoot实战

MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。

它支持的数据结构非常松散,是一种类似于JSON的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

MongoDB概念解析

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

SQL与MongoDB数据存储形式对比如下图所示:

MongoDB数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

MongoDB特点

  1. 高性能:MongoDB提供高性能的数据持久性。特别是,对嵌入式数据模型的支持减少了数据库系统上的I/O活动。索引支持更快的查询。

  2. 高可用性:MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。

  3. 高扩展性:MongoDB提供了水平可扩展性作为其核心功能的一部分。分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)

  4. 丰富的查询支持:MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

MongoDB下载与安装

MongoDB下载网址:https://www.mongodb.com/try/download/community

图形化界面MongoDB Compass下载网址: https://www.mongodb.com/try/download/compass

创建数据目录
MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。
例如:在D盘创建一个 data 的目录,然后在 data 目录里创建 db 目录。

启动MongoDB
在MongoDB 目录的 bin 目录中执行 mongod.exe 文件

D:\MongoDB\bin>mongod --dpath d:\data\db

MongoDB启动成功后,默认端口是27017

Compass连接MongoDB

连接成功后界面如下:

SpringBoot实战

功能需求
实现文章评论的增删改查,参考示例如图所示:

表结构分析
数据库:articledb

字段名称字段含义字段类型备注
_idIDObjectId或StringMongo的主键的字段
articleid文章IDString
content评论内容String
userid评论人IDString
nickname评论人昵称String
createdatetime评论的日期时间Date
likenum点赞数Int32
replynum回复数Int32
state状态String0:不可见;1:可见;
parentid上级IDString如果为0表示文章的顶级评论

文章微服务模块搭建
搭建项目工程article,项目目录结构如下

引入MongoDB依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

创建application.yml
注意,需先在MongonDB中创建articledb数据库

spring:data:mongodb:host: 127.0.0.1database: articledbport: 27017

创建启动类

@SpringBootApplication
public class ArticleApplication {public static void main(String[] args) {SpringApplication.run(ArticleApplication.class, args);}
}

启动项目,看能否正常运行。

文章实体类的创建

@Data
@Document(collection = "comment")  // 指定为comment集合
@CompoundIndex(def = "{'userid':1}")  // 在userid上建立升序索引
public class Comment implements Serializable {@Idprivate String id;//主键//该属性对应mongodb的字段的名字,如果一致,则无需该注解@Field("content")private String content;//评论内容private Date publishtime;//发布日期//添加了一个单字段的索引@Indexedprivate String userid;//发布人IDprivate String nickname;//昵称private LocalDateTime createdatetime;//评论的日期时间private Integer likenum;//点赞数private Integer replynum;//回复数private String state;//状态private String parentid;//上级IDprivate String articleid;
}

文章评论持久层的创建
创建持久层时,需继承MongoRepository接口

public interface CommentRepository extends MongoRepository<Comment, String> {
}

文章评论service层的创建

@Service
public class CommentService {@Autowiredprivate CommentRepository commentRepository;/*** 保存评论* @param comment*/public void saveComment(Comment comment){commentRepository.save(comment);}/*** 更新评论* @param comment*/public void updateComment(Comment comment){commentRepository.save(comment);}/*** 根据id删除评论* @param id*/public void deleteCommentById(String id){commentRepository.deleteById(id);}/*** 查询所有评论* @return*/public List<Comment> findCommentList(){return commentRepository.findAll();}/*** 根据id查询评论* @param id* @return*/public Comment findCommentById(String id){return commentRepository.findById(id).get();}/*** 文章评论点赞,点赞数+1* @param id*/public void updateCommentLikenum(String id){Query query = new Query(Criteria.where("_id").is(id));Update update = new Update();update.inc("likenum");mongoTemplate.updateFirst(query, update, Comment.class);}
}

文章评论微服务测试

@SpringBootTest(classes = ArticleApplication.class)
@RunWith(SpringRunner.class)
public class CommentServiceTest {@Autowiredprivate CommentService commentService;@Testpublic void testFindComment(){List<Comment> commentList = commentService.findCommentList();System.out.println(commentList);}@Testpublic void testFindCommentById(){Comment comment = commentService.findCommentById("1");System.out.println(comment);}@Testpublic void testSaveComment(){Comment comment = new Comment();comment.setArticleid("100002");comment.setContent("樊神yyds");comment.setCreatedatetime(LocalDateTime.now());comment.setUserid("1003");comment.setNickname("随缘夏沫");comment.setState("1");comment.setLikenum(0);comment.setReplynum(0);commentService.saveComment(comment);}@Testpublic void testFindCommentListByParentid(){Page<Comment> page = commentService.findCommentListByParentid("1", 1, 2);System.out.println(page.getContent());}@Testpublic void testUpdateCommentLikenum(){commentService.updateCommentLikenum("2");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/184824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单体架构demo

idea 新建maven项目 1、外层pom.xml 2、jar 包pom.xml 3、主要pom.xml 这个打包插件放在有main 启动模块中 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifact…

Windows系统IIS服务配置与网站搭建,结合内网穿透实现公网访问

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xf…

玻色量子企业荣誉

2023年 2023.7 玻色量子创始人&COO马寅荣获“优秀共产党员”荣誉称号 2023.4 斩获“双金”&#xff01;玻色量子在中国移动第七届创客马拉松大赛脱颖而出 2023.1 再创佳绩&#xff01;玻色量子荣膺2022年德勤中国“朝阳明日之星” 2023.1 玻色量子荣为第二届朝阳区“…

Vue基本使用(一)

&#x1f4d1;前言 本文主要是【Vue】——Vue基本使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#x…

CVE-2023-25573:MeterSphere 任意文件下载漏洞复现[附POC]

文章目录 MeterSphere 任意文件下载&#xff08;CVE-2023-25573&#xff09;漏洞复现[附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 MeterSphere 任意文件下载&#xff08;CVE-2023-25573&#xff09;漏洞…

图扑软件受邀出席高交会-全球清洁能源创新博览会

“相聚鹏城深圳&#xff0c;共享能源盛宴” 第二十五届中国国际高新技术成果交易会(简称“高交会”)于 11 月 15-18 日在深圳盛大开幕。高交会由商务部、科学技术部、工业和信息化部、国家发展改革委、农业农村部、国家知识产权局、中国科学院、中国工程院和深圳市人民政府共同…

Android性能优化- 从SharedPreferences到MMKV

前言 前面Android性能优化 - 从SharedPreferences跨越到DataStore一文主要介绍了DataStore的实现原理&#xff0c;以及DataStore相对于SharedPreferences的提升&#xff0c;本文主要简述MMKV相对于SharedPreferences存储的使用及优劣势&#xff0c;以及MMKV原理&#xff0c;以…

海光信息荣获ESG金牛科技引领奖!

11月24日&#xff0c;由中国证券报、中国国新控股有限责任公司、南通市人民政府联合主办的”2023金牛企业可持续发展论坛暨第一届国新杯ESG金牛奖颁奖典礼”在江苏南通举行&#xff0c;“国新杯ESG金牛奖”多项获奖名单同期揭晓。海光信息凭借卓越的技术创新实力与行业影响力&a…

6.显示评论 + 添加评论

1.显示评论 数据层&#xff1a;根据实体查询一页评论数据、根据实体查询评论的数量业务层&#xff1a;处理查询评论的业务、处理查询评论数量的业务表现层&#xff1a;显示帖子详情数据时&#xff0c;同时显示该帖子所有的评论数据 1.1 数据访问层 entity_type&#xff1a;实体…

DV、OV、EV证书

在保护您的网站并建立用户信任时&#xff0c;SSL证书起着关键作用。不同的SSL认证级别提供了不同的安全性和验证程度。在选择SSL证书时&#xff0c;了解DV&#xff08;域名验证&#xff09;、OV&#xff08;组织验证&#xff09;和EV&#xff08;扩展验证&#xff09;证书的差异…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(3)》(16)

《Linux操作系统原理分析之存储管理&#xff08;3&#xff09;》&#xff08;16&#xff09; 5 存储管理5.6 分段存储管理&#xff08;1&#xff09; 地址结构&#xff08;2&#xff09; 段表&#xff08;3&#xff09; 地址变换机构&#xff08;4&#xff09; 存储共享&#x…

【JMeter】菜单栏介绍

【菜单栏】 1. Tools 导入curl接口信息 作用&#xff1a;快速导入接口信息&#xff0c;响应头和缓存信息等 Log level临时修改日志等级 作用&#xff1a; 从勾选的level开始往更高等级level抓取log日志等级优先级&#xff1a; ALL < TRACE < DEBUG <INFO<WA…

RT_Thread_msh_系统msh命令、使用msh时过滤ulog日志、添加msh命令(不带/带参)

1、msh配置 msh功能是自动开启的&#xff0c;配置如下&#xff0c;可以在“RT-Thread Settings”里去修改。 调试过程中遇到msh不能使用&#xff0c;理解msh也是一个线程&#xff0c;有自己的优先级20&#xff0c;高优先级的线程&#xff08;比如main是10&#xff09;如果一直…

软件测试 —— 冒烟测试(Smoke Test,ST)

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Android帝国之进程杀手--lmkd

本文概要 这是Android系统启动的第三篇文章&#xff0c;本文以自述的方式来讲解lmkd进程&#xff0c;通过本文您将了解到lmkd进程在安卓系统中存在的意义&#xff0c;以及它是如何杀进程的。&#xff08;文中的代码是基于android13&#xff09; 我是谁 init&#xff1a;“大…

SpringCloudAlibaba微服务 【实用篇】| Nacos配置管理

目录 一&#xff1a;Nacos配置管理 1. 统一配置管理 2. 配置热更新 3. 配置共享 4. 搭建Nacos集群 tips&#xff1a;前些天突然发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;感兴趣的同学可以进…

Zemax光学设计——单透镜设计

单透镜系统参数&#xff1a; 入瞳直径&#xff1a;20mm F/#&#xff08;F数&#xff09;&#xff1a;10 全视场&#xff1a;10 波长&#xff1a;587nm 材料&#xff1a;BK7 优化方向&#xff1a;最佳均方根光斑直径 设计步骤 一、单透镜系统参数 步骤一&#xff1a;入…

【Spring系列】DeferredResult异步处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PDF文件如何限制打印?限制打印清晰度?

想要限制PDF文件的打印功能&#xff0c;想要限制PDF文件打印清晰度&#xff0c;都可以通过设置限制编辑来达到目的。 打开PDF编辑器&#xff0c;找到设置限制编辑的界面&#xff0c;切换到加密状态&#xff0c;然后我们就看到 有印刷许可。勾选【权限密码】输入一个PDF密码&am…

vue3随机生成8位字母+数字

// 随机生成8位字母数字 export const autoPassword: any () > {// console.log("自动生成");//可获取的字符串const chars ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz0123456789;const list [];//通过随机获取八个字符串的索引下标for (let i 0;…