上手mongodb (三)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 上手mongodb (三)

SpringDataMongoDB#


编写Repository层,进行简单的CRUD#


spring-data-mongodb的用法和jpa是一样的,Spring很强大,一统天下

  • 引入启动器
  • 配置文件,和上面的一样
  • 编写DAO层


public interface SpitRepository   extends MongoRepository<Spit,String> {}


它内置了简单的增删改查的方法,可以分页,也可以使用Spring对jpql的高级封装比如findByXXX等


MongoTemplate的使用:#


更新#


如果被更新的文档没有该条记录,就会创建出这个field,然后赋值


Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(Criteria.where("_id").is("5d50cee71e5a931d2cd72e43"));
Update update = new Update();
update.set("key1","新的值");
// 只会更新满足条件的第一条
入参位置1  query作用: 根据条件找出对应的doc
入参位置2  update作用:  进行更新的操作
mongoTemplate.updateFirst(query,update,"集合");


使用下面的函数也能达到相同更新的效果


mongoTemplate.upsert(query,update,"集合");


批量更新:

批量更新满足条件的doc,只要前面的条件满足, 就会被更新, 不存在的字段会添加上去, 存在的被更新掉


Query query = new Query();
query.addCriteria(Criteria.where("nickname").is("恩恩"));
Update update = new Update();
update.set("share","2");  // 同样, key8不存在,就新添加进去
// 只会更新满足条件的第一条
mongoTemplate.updateMulti(query,update,"spit");


仅仅更新满足条件的第一个


Query query = new Query();
query.addCriteria(Criteria.where("nickname").is("恩恩"));
Update update = new Update();
update.set("share","2");  // 同样, key8不存在,就新添加进去
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


给指定的字段增加指定的数量, 注意点是, 如果尝试对字符串增加指定的数,不报错,但是也不会改变原来的值


Query query = new Query();
query.addCriteria(Criteria.where("_id").is("1"));
Update update = new Update();
update.inc("thumbup",3); // 给指定的字段增加指定的数量
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


重命名文档的某个key


Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(Criteria.where("_id").is("1"));
Update update = new Update();
update.rename("_class","新的class"); // 给指定的字段增加指定的数量
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


移除key


update.unset("新的class");


在现有的文档基础上,嵌入文档


Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(Criteria.where("_id").is("1"));
Update update = new Update();
Spit spit = new Spit();
spit.set_id("666");
spit.setContent("我的被嵌套进来的文档");
update.addToSet("childSpit",spit);
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


修改被嵌入的文档


Query query = new Query();
Criteria criteria = new Criteria();
// 通过  添加条件定位出 指定的嵌套文档
query.addCriteria(Criteria.where("_id").is("1").and("childSpit._id").is("666"));
Update update = new Update();
// todo 通过这样条件  字段名.$.field
update.set("childSpit.$.content","嵌套文档的conntent被改变了");
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


删除嵌套文档


Query query = new Query();
Criteria criteria = new Criteria();
// 通过  添加条件定位出 指定的嵌套文档
query.addCriteria(Criteria.where("_id").is("1").and("childSpit._id").is("666"));
Update update = new Update();
update.unset("childSpit.$");
// 只会更新满足条件的第一条
mongoTemplate.updateFirst(query,update,"spit");


使用:MongoTemplate 提高效率的场景


在点赞的业务中,给某个帖子点赞的逻辑如下:

  • 前端提交帖子的id, 后端根据id查询一次数据库,把帖子查出来
  • 给帖子的赞数+1
  • 把帖子更新进数据库


前前后后使用了两次查询,下面使用MongoTemplate,可以实现和数据库一次交互,完成更新


Query query = new Query();
query.addCriteria(Criteria.where("_id").is("前端提交的id"));
Update update = new Update();
update.inc("赞的字段",1); // 自增1
mongoTemplate.updateFirst(query,update,"集合名字");


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL 数据可视化 MongoDB
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
371 1
mongoDB入门教程二:推荐一款好用的mongoDB可视化工具Robo 3T
|
7月前
|
NoSQL Linux MongoDB
MongoDB提供的这些工具
【6月更文挑战第8天】MongoDB提供的这些工具
140 6
|
8月前
|
存储 NoSQL MongoDB
Mongodb 入门
Mongodb 入门
48 0
|
NoSQL Linux MongoDB
开发中MongoDB遇到的各种问题
开发中MongoDB遇到的各种问题
188 0
|
存储 NoSQL MongoDB
06-MongoDB入门
06-MongoDB入门
|
存储 SQL JSON
三.MongoDB入门-Mongodb的CRUD
MongoDB入门-Mongodb的CRUD
|
存储 JSON NoSQL
MongoDB从入门到实战之MongoDB快速入门
MongoDB从入门到实战之MongoDB快速入门
326 0
MongoDB从入门到实战之MongoDB快速入门
|
存储 NoSQL JavaScript
mongoDB简单上手
mongoDB简单上手
273 0
mongoDB简单上手
|
存储 JSON NoSQL
mongodb笔记
mongodb笔记
429 0
|
存储 NoSQL 安全
MongoDB入门
学习使用
164 0

热门文章

最新文章