Mongo Template 实现评论点赞 | 学习笔记

简介: 快速学习 Mongo Template 实现评论点赞

开发者学堂课程【MongoDB精讲课程(上):Mongo Template 实现评论点赞学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/726/detail/12970


Mongo Template 实现评论点赞


内容介绍:评论点赞业务较为简单,当我们点击用户评论边的图标,即可使评论数加一。实现评论点赞有两种方式


一、 第一种方式

1、实现评论点赞首先根据 ID 把评论查出,查出之后根据代码

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

//把点赞数加一

CommentRepository.save(comment)

//把加完一的数据在做一次保存,实际上,做了两次数据库操作。

2、它的缺点是 IO 次数增加了,效率变低。如果数据量不大,这种性能损耗可以忽略不计,往往用 MongoDB 都是因为大变发的情况下,但一点的性能损耗都是对系统很大的损害。

3、我们看一下以下点赞的临时示例代码:  CommentService 新增 updateThumbup 方法

/**

*点赞-效率低

*@param id

*/

Public void updateCommentThumbupToIncrementingold

(String id){

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

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

CommentRepository, save(comment);

}

以上方法虽然实现起来比较简单,但是执行效率并不高,因为我只需要将点赞数加1就可以了,没必要查询出所有字段修改后再更新所有字段。(蝴蝶效应)

 

二、第二种方式

1、有一种方法直接执行一条文档更新的命令,就可以实现点赞数的加一,或找到列值增长的修改,直接执行 $inc 这个指令。

想实现比较复杂的指令的查询或命令行的更新之类,需要用到SpringDataMongoDB 提供的 MongoTemplate 模板,这个模板里面提供 update 方法,可以完成一些复杂的更新。

2、实现Mongo Template

1)首先找到 Servies 方法,注入Mongo Templateprivate MongoTemplate mongoTemplate),使用要定义一个新的方法,完成点赞数的加一。复制 public void updateCommentLikenumString id{,方法叫做  updateCommentLikenum,即更新评论的点赞数。

2Mongo Template 里面有update 方法,Update 方法有多种,例如updateFirst updateMulti 等。

FirstMulti 在之前的更新操作学习过,更新的时候可以带可选项,带上 Multi 更新多个文档 ,不带是更新 updateFirst

FirstMulti 的底层是 Mongo 的命令行,一般情况下用 updateFirst

(3)updateFirst  里面有三个参数,首先是查询条件,更新条件,其次是需要更新的集合。

更新的集合有两种写法,首先有 query update ,更新的集合名称有字符串或实体类的 class 。主要的两个参数一个是查询条件,一个是更新条件。

//查询条件

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

// 更新条件

Update update = new Update()

update. Inc (  key. “likenum”);

//inc 对应列值增长的指令集,这里面可以带一个参数,给 MongoDB 哪个资料做增长,后面如果在加一个参数 Number 类型,也可以做一个步长,跟 MongoDB 命令的方式一样(db.comment.update({_id:”3”},{$inc:{likenum:NumberInt(1)}})

mongoTemplate. updateFirst (query. update.Commen. class)

实验更新是否成功需要写一个 Test 方法,复制

public void testUpdateCommendLikenum()

调用 commentService.updateCommendLikenum();

注意:测试的方法不可以加参数

3、检测结果

运行结果控制台没有报错,刷新发现点赞数加一。这种操作的好处是只执行了一次 Mongo DB 的数据库操作,性能比第一种方式高,相当于减少了一次 IO 的操作。

相关文章
|
运维 NoSQL 算法
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
1633 0
|
3月前
|
小程序 BI Go
当“企业微信协议”遇上旧iPad:一条被遗忘的推送如何撬动千万订单
在618大促中,面对短信退订率高、触达难的问题,运营人员巧妙利用闲置iPad登录企业微信,挖掘其未公开的协议接口,实现高效用户召回,最终提升转化率,保住预算。
172 0
|
6月前
|
人工智能 数据可视化 物联网
工业4.0数字孪生新引擎:星图云开发者平台全景评测
在“中国制造2025”战略推动下,工业互联网平台迎来爆发式增长,但也面临数据孤岛、分析能力不足等技术瓶颈。中科星图推出的“星图云开发者平台”通过低代码开发、多源数据融合和智能分析等创新技术,解决了工业数字化转型中的关键问题。该平台不仅支持三维可视化渲染和遥感数据分析,还兼容多种主流GIS标准协议,实现空天地一体化数据融合。其丰富的行业模板覆盖能源、园区、水务等领域,大幅降低开发门槛。评测显示,相比传统低代码平台,星图云在3D建模、GIS支持和IoT设备接入等方面表现突出,为工业数字孪生提供了全面解决方案,助力智能化升级与跨行业应用拓展。
|
9月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc("likenum")`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
204 0
|
存储 Dubbo API
SpringCloud工程部署启动
本节笔者带领大家完成了SpringCloud工程从0->1的搭建,当然你不想搭建也可以直接采用方案一,二者等效,至此读者们完成了一个微服务工程的搭建、部署、访问。同时在本节最后一章,笔者基于RestTemplate发起的http请求实现远程调用,实现当A系统想要获取B系统数据时的跨系统数据交互。然而RESTful API访问并不是微服务的唯一解决方案,如Dubbo的交互一样可以实现,希望读者们能不限于此。
|
10月前
|
人工智能 Java 程序员
一文彻底拿下,赶紧本地部署DeepSeek体验一下最牛的大模型
本文介绍如何本地化部署DeepSeek大模型(deepseek-r1)及open-webui的安装过程,包括命令行操作、版本兼容性处理等详细步骤。DeepSeek号称“国运级”大模型,性能媲美OpenAI,支持直接对话,降低使用门槛。通过本教程,读者可以快速上手体验这一强大的推理模型。
685 0
一文彻底拿下,赶紧本地部署DeepSeek体验一下最牛的大模型
|
小程序 JavaScript Java
【Java】服务CPU占用率100%,教你用jstack排查定位
本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。
1687 2
【Java】服务CPU占用率100%,教你用jstack排查定位
|
JSON API 数据库
Python使用Quart作为web服务器的代码实现
Quart 是一个异步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是传统的 WSGI(Web Server Gateway Interface)。这使得 Quart 特别适合用于构建需要处理大量并发连接的高性能 Web 应用程序。与 Flask 类似,Quart 也非常灵活,可以轻松地构建 RESTful API、WebSockets、HTTP/2 服务器推送等。
|
Ubuntu Linux 开发者
|
Java
SpringBoot启动报错:Unable to start LiveReload server【已解决】
SpringBoot启动报错:Unable to start LiveReload server【已解决】
824 1