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");
        }
    }
    
    
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340