MongoDB,看完拿走你的赞!

stormMoonlet

共 11814字,需浏览 24分钟

 · 2021-08-09

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术语解释说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段
indexindex索引
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);
    }


浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报