上手mongodb (三)

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 上手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
相关文章
|
2天前
|
存储 NoSQL MongoDB
Mongodb 入门
Mongodb 入门
5 0
|
8月前
|
存储 NoSQL MongoDB
06-MongoDB入门
06-MongoDB入门
|
存储 JSON NoSQL
MongoDB从入门到实战之MongoDB快速入门
MongoDB从入门到实战之MongoDB快速入门
278 0
MongoDB从入门到实战之MongoDB快速入门
|
存储 JSON NoSQL
MongoDB从入门到实战之MongoDB简介
MongoDB从入门到实战之MongoDB简介
226 0
MongoDB从入门到实战之MongoDB简介
|
存储 NoSQL JavaScript
mongoDB简单上手
mongoDB简单上手
226 0
mongoDB简单上手
|
存储 NoSQL 安全
MongoDB入门
学习使用
144 0
|
NoSQL Java 数据库连接
上手mongodb (二)
上手mongodb (二)
186 0
|
存储 JSON NoSQL
上手mongodb (一)
上手mongodb (一)
176 0
ADI
|
NoSQL MongoDB 数据库
[记录] 快速上手-MongoDB
[记录] 快速上手-MongoDB
ADI
67 0
|
存储 JSON NoSQL
MongoDB 入门笔记
MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 MongoDB 的安装 我用的是 linux,因此可以用以下命令进行安装:
184 0