MongoDB快速入门及其SpringBoot实战教程

2024-03-01 0 318
目录
  • MongoDB快速入门及其SpringBoot实战
    • MongoDB简介
    • MongoDB概念解析
    • MongoDB数据类型
    • MongoDB特点
    • 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快速入门及其SpringBoot实战教程

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特点

  • 高性能:MongoDB提供高性能的数据持久性。特别是,对嵌入式数据模型的支持减少了数据库系统上的I/O活动。索引支持更快的查询。
  • 高可用性:MongoDB的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。
  • 高扩展性:MongoDB提供了水平可扩展性作为其核心功能的一部分。分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)
  • 丰富的查询支持:MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

MongoDB下载与安装

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

MongoDB快速入门及其SpringBoot实战教程

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

MongoDB快速入门及其SpringBoot实战教程

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

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

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

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

Compass连接MongoDB

MongoDB快速入门及其SpringBoot实战教程

连接成功后界面如下:

MongoDB快速入门及其SpringBoot实战教程

SpringBoot实战

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

MongoDB快速入门及其SpringBoot实战教程

表结构分析数据库:articledb

字段名称字段含义字段类型备注_idIDObjectId或StringMongo的主键的字段articleid文章IDStringcontent评论内容Stringuserid评论人IDStringnickname评论人昵称Stringcreatedatetime评论的日期时间Datelikenum点赞数Int32replynum回复数Int32state状态String0:不可见;1:可见;parentid上级IDString如果为0表示文章的顶级评论

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

MongoDB快速入门及其SpringBoot实战教程

引入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.1
database: articledb
port: 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 {
@Id
private String id;//主键
//该属性对应mongodb的字段的名字,如果一致,则无需该注解
@Field(\”content\”)
private String content;//评论内容
private Date publishtime;//发布日期
//添加了一个单字段的索引
@Indexed
private String userid;//发布人ID
private String nickname;//昵称
private LocalDateTime createdatetime;//评论的日期时间
private Integer likenum;//点赞数
private Integer replynum;//回复数
private String state;//状态
private String parentid;//上级ID
private String articleid;
}

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

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

文章评论service层的创建

@Service
public class CommentService {
@Autowired
private 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 {
@Autowired
private CommentService commentService;
@Test
public void testFindComment(){
List<Comment> commentList = commentService.findCommentList();
System.out.println(commentList);
}
@Test
public void testFindCommentById(){
Comment comment = commentService.findCommentById(\”1\”);
System.out.println(comment);
}
@Test
public 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);
}
@Test
public void testFindCommentListByParentid(){
Page<Comment> page = commentService.findCommentListByParentid(\”1\”, 1, 2);
System.out.println(page.getContent());
}
@Test
public void testUpdateCommentLikenum(){
commentService.updateCommentLikenum(\”2\”);
}
}

到此这篇关于MongoDB快速入门及其SpringBoot实战的文章就介绍到这了,更多相关MongoDB入门内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 MongoDB MongoDB快速入门及其SpringBoot实战教程 https://www.u-9.cn/database/mongodb/182109.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务