5-MongoDB实战演练

简介: 本课程以某头条文章评论业务为场景,基于MongoDB实战实现评论的增删改查、按文章ID查询、分页加载及点赞功能。采用SpringDataMongoDB与MongoTemplate优化数据操作,提升性能,并结合索引优化查询效率。

5-MongoDB实战演练

5.1 需求分析
某头条的文章评论业务如下:

早晨空腹喝水,是对还是错?

外从小喝凉水,冰水,也没见伤亡率就试我大天朝高多少?喝热水喝开水是当年我国建国初期

不少人认为,早起喝杯水,能够起到补水乃至减肥的作用.

生条件差,水不烧开了喝细菌多容易致病,而习惯性传下来喝开水而己,并不是什么别的原因

我们不应该把清晨浪费在手机上,健康很重要,杯温水幸福你我他

研究表明,刚烧开的水干万不能喝,因为烫嘴

我夏天空膜喝凉开水,冬天喝温开水

中间一条线两边是饭店17天前

我一直喝凉开水,冬天夏天都喝

厚德载物4426998517天有

|惊鸿照影|17天前

工人日报2019-08-0508:41:50

河畔半守护为伊人17天前

[捂脸[捂脸]岁月不饶人

专家说不能空腹吃饭

64条评论

FENGBETTA17天前

回复,5条回复V

你还年轻,火力旺.

回复收起回复人

TEAWEB17天前

南街村夫17天前

南街村夫17天前

写下您的评论..

查看更多评平论

12凸口

4仓回

4仓口

6凸回

8E

回复

回复

回复

评平论

回复

回复

2凸口

06

3F


需要实现以下功能:
1)基本增删改查API
2)根据文章id查询评论
3)评论点赞
5.2 表结构分析
数据库:articledb

:不可见;1:可见;

如果为0表示文章的顶级评论

评论的日期时间

MONGO的主键的字段

OBJECTLDSTRING

段名称

CREATEDATETIME

字段类型

评论人ID

字段含义

IKENUM

栏兰文章评论

ARTICLEID

点赞数

评论人呢称

COMMENT

REPYNUM

文章ID

STRING

ARENTIC

ICKNAME

NT32

备注

评论内容

ONTENT

回复数

上级ID

SERID

STRING

STRING

STATE

TRING

状态

INT32

STRING

STRING

DATE

1D

ID


5.3 技术选型
5.3.1 mongodb-driver(了解)
mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动。我们通过一个入门的案例来了解mongodb-driver的基本使用。
官方驱动说明和下载:链接 ,官方驱动示例文档:链接
5.3.2 SpringDataMongoDB
SpringData家族成员之一,用于操作MongoDB的持久层框架,封装了底层的mongodb-driver。
官网主页: https://projects.spring.io/spring-data-mongodb/
5.4 文章微服务模块搭建
(1)搭建项目工程article,pom.xml引入依赖:
(2)创建application.yml
(3)创建启动类
cn.itcast.article.ArticleApplication
(4)启动项目,看是否能正常启动,控制台没有错误。
5.5 文章评论实体类的编写
创建实体类 创建包cn.itcast.article,包下建包po用于存放实体类,创建实体类
cn.itcast.article.po.Comment
说明:
索引可以大大提升查询效率,一般在查询字段上添加索引,索引的添加可以通过Mongo的命令来添加,也可以在Java的实体类中通过注解添加。
1)单字段索引注解@Indexed
org.springframework.data.mongodb.core.index.Indexed.class
声明该字段需要索引,建索引可以大大的提高查询效率。
Mongo命令参考:

db.comment.createIndex({"userid":1})

2)复合索引注解@CompoundIndex
org.springframework.data.mongodb.core.index.CompoundIndex.class
复合索引的声明,建复合索引可以有效地提高多字段的查询效率。
Mongo命令参考:

db.comment.createIndex({"userid":1,"nickname":-1})

5.6 文章评论的基本增删改查
(1)创建数据访问接口 cn.itcast.article包下创建dao包,包下创建接口
cn.itcast.article.dao.CommentRepository
(2)创建业务逻辑类 cn.itcast.article包下创建service包,包下创建类
cn.itcast.article.service.CommentService
(3)新建Junit测试类,测试保存和查询所有:
cn.itcast.article.service.CommentServiceTest
添加结果:

CLASS:CN.ITCAST.ARTICLE.PO.COMMENT

CREATEDATETIME:2019-08-3103:23:40.921

ID:*1167639062832615424

CONTENT:"则试式添的好居

KNAME:凯大帝

ARTIC1EID:"1OEEOE

USERID:"1EE3

REPLYNUM:E

1IKENUM:E

STATE:1


5.7 根据上级ID查询文章评论的分页列表
(1)CommentRepository新增方法定义
(2)CommentService新增方法
(3)junit测试用例:
cn.itcast.article.service.CommentServiceTest
(4)测试
使用compass快速插入一条测试数据,数据的内容是对3号评论内容进行评论。

ARTLCLEDB.COMMENT

专家说不能空腹吃饭,响健康."

5D689257EDFC962DA8DD895E

"我一直喝凉开水,冬天夏天喝."

TICLEID:"100E81

INSERTDOCUMENT

INSERTDOCUMENT

NICKNAME:凯散..

CONTENT:你年全,.

NICKNAMESTRIR

OCUMENTSO

USERID:1OE3

建康.""1003"

DOCUMENTS

伊人焦摔"

AGGRES

PARENTID:3

CANCEL

STRING

IDMIXED

OFILTER

INSERT

COMMENT

STRING

STRING

"100001"

STRING

凯撒大帝"

100001"

杰克船长

号.""1004"

ROSE"

三LS

ID:"33"

STRING

STRING

3

2"


执行测试,结果:

----总记录数:1
----当前页数据:[Comment{id='33', content='你年轻,火力大', publishtime=null, userid='1003', nickname='凯撒大帝', createdatetime=null, likenum=null, replynum=null, state='null', parentid='3', articleid='100001'}]

5.8 MongoTemplate实现评论点赞
我们看一下以下点赞的临时示例代码: CommentService 新增updateThumbup方法

Java

运行代码复制代码

1

2

3

4

5

6

7

8

9

/**

* 点赞-效率低

* @param id

*/

public void updateCommentThumbupToIncrementingOld(String id){

Comment comment = CommentRepository.findById(id).get();

comment.setLikenum(comment.getLikenum()+1);

CommentRepository.save(comment);

}

以上方法虽然实现起来比较简单,但是执行效率并不高,因为我只需要将点赞数加1就可以了,没必要查询出所有字段修改后再更新所有字段。我们可以使用MongoTemplate类来实现对某列的操作。
(1)修改CommentService

Java

运行代码复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//注入MongoTemplate

@Autowired

private MongoTemplate mongoTemplate;


/**

* 点赞数+1

* @param id

*/

public void updateCommentLikenum(String id){

//查询对象

Query query=Query.query(Criteria.where("_id").is(id));

//更新对象

Update update=new Update();

//局部更新,相当于$set

// update.set(key,value)

//递增$inc

// update.inc("likenum",1);

update.inc("likenum");

//参数1:查询对象

//参数2:更新对象

//参数3:集合的名字或实体类的类型Comment.class

mongoTemplate.updateFirst(query,update,"comment");

}

(2)测试用例:
cn.itcast.article.service.CommentServiceTest

Java

运行代码复制代码

1

2

3

4

5

6

7

8

/**

* 点赞数+1

*/

@Test

public void testUpdateCommentLikenum(){

//对3号文档的点赞数+1

commentService.updateCommentLikenum("3");

}

执行测试用例后,发现点赞数+1了:

CONTENT:"我一直喝凉开水,冬天粤天喝.

CREATEDATETIME:2019-08-0601:

ICKNAME:"杰克船长"

ARTIC1EID:"1EOE81

USERID:1EE4

1:05:06.321

1IKENUM:667

STATE:

ID:M3"


相关文章
|
机器学习/深度学习 人工智能 自动驾驶
深度学习-数据增强与扩充
深度学习-数据增强与扩充
|
机器学习/深度学习 PyTorch 算法框架/工具
【python-Unet】计算机视觉~舌象舌头图片分割~机器学习(三)
【python-Unet】计算机视觉~舌象舌头图片分割~机器学习(三)
1306 0
|
4天前
|
存储 弹性计算 人工智能
阿里云免费云服务器领取教程及阿里云免费云产品全解析:从资源配置到实用指南
在云计算普及的当下,阿里云作为国内领先的云服务提供商,长期推出免费云产品试用体系,覆盖从基础设施到上层应用的全场景需求,为个人开发者、学生及初创企业降低了上云门槛。然而,免费资源背后往往存在配置限制、合规要求等细节问题,用户需结合自身场景理性选择。本文基于阿里云官方规则与真实使用反馈,系统梳理免费云产品的资源矩阵、使用体验、常见风险及适配场景,为不同需求的用户提供全面参考。
|
4天前
|
存储 弹性计算 监控
金融量化场景下阿里云服务器 ECS 实例规格族选择指南
在金融量化交易场景中,计算性能、网络延迟与数据处理稳定性直接影响交易策略的执行效率与收益表现。阿里云服务器 ECS 作为核心算力支撑,其实例规格族的选择需围绕量化交易对 “高计算密度、低网络时延、高 IO 稳定性” 的核心需求展开。本文将结合阿里云最新实例迭代信息,从场景需求匹配、规格族性能对比、配置方案优化三个维度,系统梳理金融量化场景下 ECS 实例的选择逻辑。
|
9天前
|
机器学习/深度学习 人工智能 编解码
阿里云 AI 服务器配置及价格表_今年最新阿里云GPU服务器租赁费用(1个月、1年和1小时收费明细表)
阿里云 AI 服务器提供多样化硬件组合方案,涵盖 CPU+GPU、CPU+FPGA、CPU+TPU、CPU+ASIC 等多种加速卡配置,具备超强计算能力,主要适用于人工智能、机器学习、深度学习等计算密集型任务,同时也可满足科学计算、图形可视化、视频处理等场景的算力需求。以下是其 GPU 服务器的具体规格、价格及适用场景整理:
|
2月前
|
存储 网络协议 测试技术
阿里云通用算力型实例u1/u2i/u2a对比,差异解析与选型参考
目前通用算力型实例规格已经有u1、u2i、u2a这三大实例类型,有的新手用户便宜不是很清楚他们之间有何区别?我们应该如何选择?本文从技术架构、性能指标、适用场景到收费价格,对比三大实例,以供了解和选择参考。
|
弹性计算 应用服务中间件
阿里云服务器新老用户新购、续费、升级折扣汇总(最新更新)
阿里云服务器折扣分为新用户购买折扣,老用户购买折扣、老用户续费或者升级云服务器折扣和新老用户购买海外地域云服务器折扣,新用户折扣往往要比老用户低一些,下面是最新的新购和续费升级折扣优惠汇总。
阿里云服务器新老用户新购、续费、升级折扣汇总(最新更新)
|
4天前
|
存储 人工智能 数据可视化
阿里云万小智 AI 建站系统全解析:版本功能、价格体系与场景适配
在企业数字化转型与个人建站需求增长的背景下,阿里云基于通义大模型推出的万小智 AI 建站系统,以 “低门槛、高效率、全集成” 为核心优势,成为无需专业开发能力用户的重要选择。该系统分为基础版、标准版、企业版三个层级,覆盖从个人博客到中大型企业官网的全场景需求,且购买即赠 CN 域名,进一步降低建站成本。本文结合今年最新官方文档与实测体验,从核心特性、版本差异、价格规则、场景适配等维度展开解析,为用户提供客观选型参考。
|
2月前
|
人工智能 自然语言处理 数据可视化
阿里云万小智AI建站是什么?产品架构、优势、功能与收费标准参考
万小智AI建站是阿里云面向企业及个人用户提供的一款AI驱动的自助建站产品,无需编程基础,通过对话式交互、可视化拖拽操作和AI辅助内容生成,即可快速搭建响应式网站。用户购买后无需单独配置服务器,只需注册域名并完成备案(如部署在中国内地),即可上线网站。
289 20
|
10天前
|
弹性计算 小程序
【阿里云杀疯了】最便宜云服务器推荐38元1年200M带宽、99元3M固定带宽
阿里云超值优惠:轻量应用服务器2核2G仅38元/年,200M峰值带宽、40G硬盘、不限流量;ECS经济型2核2G 99元/年,3M固定带宽;企业专享2核4G 5M带宽199元/年。新老同享,续费不涨价,适合建站、小程序及学习测试,性价比极高!
167 0