MongoDB,看完拿走你的赞!
MongoDB介绍
NOSQL简介
NoSQL(NoSQL = Not Only SQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入
为什幺使用NoSQL :
对数据库高并发读写。 对海量数据的高效率存储和访问。 对数据库的高可扩展性和高可用性。
MongoDB 特点
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。 Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
安装MongoDB
#拉取镜像
docker pull mongo:latest
#创建和启动容器
docker run -d --restart=always -p 27017:27017 --name mongo -v /data/db:/data/db -d mongo
#进入容器
docker exec -it mongo /bin/bash
#使用MongoDB客户端进行操作
mongo
> show dbs #查询所有的数据库
MongoDB基本概念
MongoDB和传统数据库对比
sql术语 | MongoDB术语 | 解释说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段 |
index | index | 索引 |
table joins | - | 表连接,MongoDB不支持 |
命令使用
//切换/如果数据库不存在,则创建数据库,否则切换到指定数据库
use test
//查询所有数据库
show dbs;
//删除当前使用数据库
db.dropDatabase();
//查看当前使用的数据库
db.getName();
//查询表里面所有数据
db.集合(表名).find() //db.User.find()
使用场景 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由M ongo搭建的持久化缓存层可以避免下层的数据源过载。 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵, 在此之前,很多时候程序员往往会选择传统的文件进行存储。 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对Map Reduce弓摩的内置支持。 用于对象及 JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储 及查询。
Springboot整合MongoDB
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
添加配置
spring.data.mongodb.uri=mongodb://192.168.75.129:27017/test
创建实体类
@Data
@Document("User") //指定数据库表(集合)
public class User {
@Id
private String id;
private String name;
private Integer age;
private String email;
private String createDate;
}
基于MongoTemplate开发
crud操作
@Autowired
private MongoTemplate mongoTemplate;
//添加
@Test
public void add(){
User user = new User();
user.setName("张三");
user.setAge(11);
user.setEmail("123@qq.com");
User user1 = mongoTemplate.insert(user);
System.out.println(user1);
}
//查询name = 张三 age = 100的信息
@Test
public void getUserByName(){
Query query = new Query(Criteria.where("name").is("张三").and("age").gt(10));//条件查询
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
//模糊查询 name = 张
@Test
public void findLikeUserList(){
String name = "张";
String regex = String.format("%s%s%s", "^.*", name, ".*$"); //正则匹配
Query query = new Query(Criteria.where("name").regex(regex));//条件查询
List<User> users = mongoTemplate.find(query, User.class);
System.out.println(users);
}
//分页查询
@Test
public void findPageUserList(){
int page = 2;
int pageSize = 2;
String name = "张";
String regex = String.format("%s%s%s", "^.*", name, ".*$");
Query query = new Query(Criteria.where("name").regex(regex));
long count = mongoTemplate.count(query, User.class);
//去掉(skip){(当前页-1)*每页显示条数} 显示后面条数
List<User> users = mongoTemplate.find(query.skip((page - 1) * pageSize).limit(pageSize), User.class);
System.out.println(users);
}
//修改
@Test
public void updateUser(){
User user = mongoTemplate.findById("610ca7f6ae27a54fc5ae9ff6", User.class);
Query query = new Query(Criteria.where("_id").is(user.getId()));
Update update = new Update();
update.set("age",100);
update.set("email","66666@qq.com");
UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
//修改成功为1
long modifiedCount = upsert.getModifiedCount();
System.out.println(modifiedCount);
System.out.println(upsert);
}
//删除
@Test
public void deleteUser(){
Query query = new Query(Criteria.where("age").is(100));
DeleteResult remove = mongoTemplate.remove(query, User.class);
long deletedCount = remove.getDeletedCount();
System.out.println(deletedCount);
}
基于MongoRepository开发
继承MongoRepository
public interface UserRepository extends MongoRepository<User,String> {
}
crud操作
@Autowired
private UserRepository userRepository;
//添加
@Test
public void add(){
User user = new User();
user.setName("张三");
user.setAge(110);
user.setEmail("123@qq.com");
User save = userRepository.save(user);
System.out.println(save);
}
//查询所有数据
@Test
public void getUserByName(){
List<User> all = userRepository.findAll();
System.out.println(all);
}
//条件查询
public void findUserList(){
User user = new User();
user.setName("张三");
Example<User> example = Example.of(user);
List<User> all = userRepository.findAll(example);
System.out.println(all);
}
//模糊查询
@Test
public void findLikeUserList(){
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
User user = new User();
user.setName("张");
//创建实例
Example<User> example = Example.of(user,matcher);
List<User> all = userRepository.findAll(example);
System.out.println(all);
}
//分页查询
@Test
public void findPageUserList(){
PageRequest pageRequest = PageRequest.of(0, 2);
User user = new User();
user.setName("张三");
//创建实例
Example<User> example = Example.of(user);
Page<User> all = userRepository.findAll(example, pageRequest);
System.out.println(all.getContent());
}
//修改
@Test
public void updateUser(){
User user = userRepository.findById("610cad26edfff024a519ad78").get();
user.setName("小明");
//存在id就会修改,不存在则是添加
User save = userRepository.save(user);
}
//删除
@Test
public void deleteUser(){
User user = new User();
user.setId("610cad26edfff024a519ad78");
userRepository.delete(user);
}
评论