MongoDB

一. MongoDB简介

1、MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。

2、你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。

3、你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

4、如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片。

5、Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

6、MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。

7、Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

8、Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。

9、Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。

10、GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。

11、MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

12、MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

13、MongoDB安装简单。

二. MongoDB的安装和使用

  1. 安装

    docker pull mongo:latest
    
  2. 创建和启动容器

    对data 目录授权
    chmod -R 777 /data
    
    创建和启动
    docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
    
  3. 进入容器

    docker exec -it mymongo /bin/bash
    使用mongo客户端:mongo
    

三. Mongo的使用

  1. db.help()
  2. use test 切换/创建数据库
  3. show dbs 查询所有数据库
  4. db.dropDatabase() 删除当前使用的数据库
  5. db.getName() 查看当前数据库

四. 语法结构解析

  1. 概念解析

    database 数据库
    collection 数据库表/集合
    document 数据记录行/文档
    field 数据字段/域
    index 索引
    
    创建集合:
    db.createCollection("collName");
    得到指定的集合:
    db.getCollection("user")
    
  2. 使用场景

    1.网站数据
    2.缓存
    3.大尺寸
    4.高伸缩性的场景
    5.用于对象及json数据的储存
    
  3. 不适用场景

    1. 高度事务性系统
    2. 传统的商业只能应用
    3. 
    

五. MongoDB 的CRUD

  1. INSERT

    db.User.save({name:'',age:20....})
    db.User.find()
    
  2. QUERY

    db.User.find({name:''})
    db.User.find({name:},{'name':1,'age':1}) 指定查询的字段
    db.User.find().sort({age:1}) 排序
    db.User.find().skip(0).limit(3) 跳过0个数据分页展示3个
    db.User.find({age:{$in:[21,26,32]}}) in操作
    db.User.find({age:{$gt:20}}).cout() 年龄小于20的数量
    db.User.find({$or:[{age:20},{age:30}]}) or操作
    
  3. UPDATE

    db.User.update({name:"lucy"},{$set:{age:200,sex:0}})
    
    
  4. Remove

    db.User.remove(id) id删除
    db.User.remove({}) 删除所有
    
    

六. SpringBoot集成MongoDB

  1. 引入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>
    
    
  2. 配置文件

    spring.data.mongodb.uri=mongodb://192.168.xx.xx
    
    
  3. 实体类

    @Document("User")
    
    
  4. 测试类

    package jack.sun.yygh.hosp.testmongo;
    
    import com.mongodb.client.result.DeleteResult;
    import com.mongodb.client.result.UpdateResult;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Pattern;
    
    @RestController
    @RequestMapping("/mongo1")
    public class TestMongo1 {
        @Autowired
        private MongoTemplate mongoTemplate;
        //创建
        @GetMapping("/create")
        public void createUser(){
            User user = new User();
            user.setAge(20);
            user.setName("test");
            user.setEmail("12345@qq.com");
            User insert = mongoTemplate.insert(user);
            System.out.println("insert = " + insert);
        }
        //查询所有
        @GetMapping("/findAll")
        public List<User> findAll(){
            List<User> all = mongoTemplate.findAll(User.class);
            return all;
        }
        //id查询
        @GetMapping("/findById")
        public User findById(){
            User byId = mongoTemplate.findById("62ff8e11a88eba44f03b6d78", User.class);
            return byId;
        }
        //条件查询
        @GetMapping("/findByUser")
        public List<User> findByUser(){
            Query query = new Query(Criteria.where("name").is("test").and("age").is(20));
            List<User> users = mongoTemplate.find(query, User.class);
            return users;
        }
        //模糊查询
        @GetMapping("/findByLike")
        public List<User> findByLike(){
            String name = "est";
            String regex = String.format("%s%s%s","^.*",name,".*$");
            Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
            Query query = new Query(Criteria.where("name").regex(pattern));
            List<User> users = mongoTemplate.find(query, User.class);
            return users;
        }
        //分页查询
        @GetMapping("/findPage")
        public void findPage(){
            String name = "est";
            int pageNo = 1;
            int pageSize = 10;
            String regex = String.format("%s%s%s","^.*",name,".*$");
            Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
            Query query = new Query(Criteria.where("name").regex(pattern));
            int totalCount = (int) mongoTemplate.count(query,User.class);
            List<User> users = mongoTemplate.find(query.skip((pageNo-1)*pageSize).limit(pageSize), User.class);
            Map<String,Object> pageMap = new HashMap<>();
            pageMap.put("list", users);
            pageMap.put("totalCount",totalCount);
            System.out.println("pageMap = " + pageMap);
        }
        //修改数据
        @RequestMapping("/update")
        public void update(){
            Query query = new Query(Criteria.where("_id").is("62ff8e11a88eba44f03b6d78"));
            User user = new User();
            user.setAge(200);
            user.setName("lucy");
            user.setEmail("123@qq.com");
            Update update = new Update();
            update.set("name",user.getName());
            update.set("age",user.getAge());
            update.set("email",user.getEmail());
            UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
            long modifiedCount = upsert.getModifiedCount();
            System.out.println("modifiedCount = " + modifiedCount);
        }
        //删除
        @GetMapping("/delete")
        public void delete(){
            Query query = new Query(Criteria.where("_id").is("62ff8e11a88eba44f03b6d78"));
            DeleteResult remove = mongoTemplate.remove(query, User.class);
            long deletedCount = remove.getDeletedCount();
            System.out.println("deletedCount = " + deletedCount);
        }
    }
    
    
    
  5. 测试类

    创建Service
    @Repository
    public interface MongoResporityDemo extends MongoRepository<User,String> {
    }
    测试类
    package jack.sun.yygh.hosp.testmongo;
    
    import com.mongodb.client.result.DeleteResult;
    import jack.sun.yygh.hosp.service.MongoResporityDemo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.*;
    
    
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Pattern;
    
    @RestController
    @RequestMapping("/mongo2")
    public class TestMongo2 {
        @Autowired
        private MongoResporityDemo mongoResporityDemo;
        //创建
        @GetMapping("/create")
        public User createUser(){
            User user = new User();
            user.setAge(20);
            user.setName("zhangsan");
            user.setEmail("12345@qq.com");
            User save = mongoResporityDemo.save(user);
            return save;
        }
        //查询所有
        @GetMapping("/findAll")
        public List<User> findAll(){
            List<User> all = mongoResporityDemo.findAll();
            return all;
        }
        //id查询
        @GetMapping("/findById")
        public User findById(){
            User user = mongoResporityDemo.findById("62ff8e11a88eba44f03b6d78").get();
            return user;
        }
        //条件查询
        @GetMapping("/findByUser")
        public List<User> findByUser(){
            User user = new User();
            user.setName("张三");
            user.setAge(20);
            Example<User> of = Example.of(user);
            List<User> all = mongoResporityDemo.findAll(of);
            return all;
        }
        //模糊查询
        @GetMapping("/findByLike")
        public List<User> findByLike(){
            ExampleMatcher matcher = ExampleMatcher.matching()
                    .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                    .withIgnoreCase(true);
            User user = new User();
            user.setName("三");
            Example<User> of = Example.of(user,matcher);
            List<User> all = mongoResporityDemo.findAll(of);
            return all;
        }
        //分页查询
        @GetMapping("/findPage")
        public void findPage(){
            Pageable pageable = PageRequest.of(0,3);
            ExampleMatcher matcher = ExampleMatcher.matching()
                    .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                    .withIgnoreCase(true);
            User user = new User();
            user.setName("三");
            Example<User> of = Example.of(user,matcher);
            Page<User> all = mongoResporityDemo.findAll(of, pageable);
            System.out.println("all = " + all);
    
        }
        //修改数据
        @RequestMapping("/update")
        public void update(){
            User user = mongoResporityDemo.findById("62ff8e11a88eba44f03b6d78").get();
            user.setAge(999);
            user.setName("lisi");
            user.setEmail("12345999@qq.com");
            User save = mongoResporityDemo.save(user);
        }
        //删除
        @GetMapping("/delete")
        public void delete(){
            mongoResporityDemo.deleteById("62ff8e11a88eba44f03b6d78");
        }
    }
    
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值