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);
    }
评论
