mongoDB-学习笔记
前言
-
为什么使用NoSQL :
1、对数据库高并发读写。
2、对海量数据的高效率存储和访问。
3、对数据库的高可扩展性和高可用性。
-
弱点:
1、数据库事务一致性需求
2、数据库的写实时性和读实时性需求
3、对复杂的SQL查询,特别是多表关联查询的需求
安装
-
#拉取镜像
- docker pull mongo:latest
-
创建和启动容器
- docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
-
进入容器
- docker exec -it mymongo /bin/bash
-
使用MongoDB客户端进行操作
- mongo
命令
- show dbs #查询所有的数据库
。。。
笔记连接
一些命令和其他内容:https://www.aliyundrive.com/s/LvFJDu1ddTD
整合spring
MongoTemplate
MongoRepository
spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。
引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
简单的配置
spring.data.mongodb.uri=mongodb://192.168.177.130:27017/test
实体类
@Document("User")//对MongoDB中的某个集合或者文档进行操作
public class User {
@Id//由MongoDB生成
private String id;
private String name;
private Integer age;
private String email;
private String createDate;
}
MongoTemplate
测试类
简单查询
@Autowired
private MongoTemplate mongoTemplate;
@Test
void contextLoads() {
User user = new User();
user.setName("test");
user.setAge(18);
user.setEmail("123@123.com");
User insert = mongoTemplate.insert(user);
System.out.println(insert);
}
----测试结果:
---User(id=61ae0caa5dfce0015d449fa4, name=test, age=18, email=123@123.com, createDate=null)
/**
* 查询所有
*/
@Test
public void TestFindAll(){
List<User> all = mongoTemplate.findAll(User.class);
System.out.println(all);
}
/**
* 根据id查询
*/
@Test
public void testFindById(){
User byId = mongoTemplate.findById("61ae0caa5dfce0015d449fa4", User.class);
System.out.println(byId);
}
根据条件查询
/**
* 根据条件查询
*/
@Test
public void testQuery(){
//查询 name = test and age = 18
Query query = new Query(Criteria.where("name").is("test").and("age").is(18));
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
模糊查询
/**
* 模糊查询
*/
@Test
public void findLick(){
String name = "est";//name中只要包含est即可
String regex = String.format("%s%s%s","^.*",name,".*$");
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);//Pattern.CASE_INSENSITIVE不区分分大小写,可以不添加该参数
Query query = new Query(Criteria.where("name").regex(pattern));//regex 正则表达式
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
分页查询
/**
* 分页查询
*/
@Test
public void pageLimit(){
String name = "est";
String regex = String.format("%s%s%s","^.*",name,".*$");
Pattern pattern = Pattern.compile(regex);
Query query = new Query(Criteria.where("name").regex(pattern));
//查询记录数
long count = mongoTemplate.count(query, User.class);
System.out.println(count);
int pageNo = 1;//当前页码
int pageSize = 5;//每页记录数
List<User> users = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
System.out.println(users);
}
修改
/**
* 修改
*/
@Test
public void updateTest(){
//创建查询条件
Query query = new Query(Criteria.where("_id").is("61ae15d9a820aa7d83c10671"));
//修改条件
Update update = new Update();
update.set("name","newName");
UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
long modifiedCount = upsert.getModifiedCount();//影响的行数
System.out.println(modifiedCount);
}
删除
/**
* 删除
*/
@Test
public void deleteUser(){
Query query = new Query(Criteria.where("_id").is("61ae15d9a820aa7d83c10671"));
DeleteResult remove = mongoTemplate.remove(query, User.class);
long deletedCount = remove.getDeletedCount();//影响行数
System.out.println(deletedCount);
}
MongoRepository
创建一个接口,继承MongoRepository
public interface UserRepository extends MongoRepository<User,String> {
}
调用UserRepository
来进行增删改查的操作
查询的方法与MongoTemplate
基本一致,增删改等,逻辑一样,调用的方法有细微的差距
添加
//有id就是修改,没有id就是保存
@Autowired
private UserRepository userRepository;
/**
* 添加操作
*/
@Test
void contextLoads() {
User user = new User();
user.setName("respUserName1");
user.setAge(28);
user.setEmail("resp2@qq.com");
User save = userRepository.save(user);
System.out.println(save);
}
简单查询
/**
* 查询所有
*/
@Test
public void TestFindAll(){
List<User> all = userRepository.findAll();
System.out.println(all);
}
/**
* 根据id查询
*/
@Test
public void testFindById(){
// Optional<User> byId = userRepository.findById("61ae31d21aa43a1019b68c64");
User user = userRepository.findById("61ae31d21aa43a1019b68c64").get();
System.out.println(user);
条件查询
/**
* 根据条件查询
*/
@Test
public void testQuery(){
//name = respUserName1 and age = 28
User user = new User();
user.setName("respUserName1");
user.setAge(28);
Example<User> userExample = Example.of(user);
List<User> all = userRepository.findAll(userExample);
System.out.println(all);
}
模糊查询
/**
* 模糊查询
*/
@Test
public void findLick(){
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
User user = new User();
user.setName("Name1");
Example<User> userExample = Example.of(user,matcher);
List<User> all = userRepository.findAll(userExample);
System.out.println(all);
}
分页查询
/**
* 分页查询
*/
@Test
public void pageLimit(){
Sort sort = Sort.by(Sort.Direction.DESC, "age");
//0为第一页
Pageable pageable = PageRequest.of(0, 10, sort);
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
User user = new User();
user.setName("Name1");
//创建实例
Example<User> example = Example.of(user, matcher);
Page<User> pages = userRepository.findAll(example, pageable);
System.out.println(pages);
}
修改
修改和保存用的是同一个方法
save()
//有id就是修改,没有id就是保存
/**
* 修改
*/
@Test
public void updateTest(){
User user = new User();
user.setId("61ae31d21aa43a1019b68c64");
user.setName("respUserName2");
User save = userRepository.save(user);//有id就是修改,没有id就是保存
System.out.println(save);
}
删除
/**
* 删除
*/
@Test
public void deleteUser(){
userRepository.deleteById("61ae31d21aa43a1019b68c64");
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgacgfb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01