docker安装mongoDB及使用方法是什么


这篇文章主要介绍“docker安装mongoDB及使用方法是什么”,在日常操作中,相信很多人在docker安装mongoDB及使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”docker安装mongoDB及使用方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、mongoDB是什么?

    MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写。

    1. mongo的体系结构

    • mongo中的集合相当于mysql中表的概念;

    • mongo中的文档相当于mysql中行的概念;

    • mongo中的域相当于mysql中字段/列的概念;

    2. mongoDB的特点(或使用场景)

    • 支持存储海量数据;(例如:直播中的打赏数据);

    • 支持频繁的数据读写;(例如:游戏道具);

    • 数据安全性不高,存在数据误差(丢失数据);

    • mongoDB不支持多表操作,不支持事务;

    • mongoDB使用Bson存储格式,支持动态字段管理;

    3. mongoDB与mysql、redis对比

    与redis对比

    1. redis纯内存数据库,内存不足时触发淘汰策略,mongoDB使用内存加磁盘的存储策略具有高扩展性;

    2. mongoDB使用Bson存储格式,支持动态字段管理方便扩展;

    与mysql对比

    1. mongoDB不支持多表操作,不支持事务;

    2. mongoDB使用Bson存储格式,支持动态字段管理;

    查询效率对比

    Redis > MongoDB > MySQL

    4. mongoDB存储原理

    1. mongoDb采用内存加磁盘的方式存储数据;

    2. mongoDb支持数据分片,当单一的服务器中磁盘不够用的时候,还可以串联其他服务器;

    3. 客户端的请求到达内存时,先在日志中记录下操作记录,然后再去操作内存;

    4. 内存中的日志每10ms向磁盘中的日志进行同步一次,数据则每分钟同步一次;

    5. 客户端先去内存中查询数据,内存中没有再去查询磁盘;

    6. 当客户端写入的时候,会先写入到内存中,内存中写入后请求直接返回,内存中的数据会根据同步策略同步到磁盘;

    7. 如果机器宕机,在重启服务的时候会解析磁盘中的日志和磁盘中的数据进行对比,将未入到磁盘中的数据写入磁盘,但可能会丢失10ms的数据;

    二、使用docker安装mongo

    1.安装

    拉取mongo镜像

    dockerpullmongo:4.4

    创建mongo数据持久化目录

    mkdir-p/docker_volume/mongodb/data

    运行容器

    dockerrun-itd--namemongo-v/docker_volume/mongodb/data:/data/db-p27017:27017mongo:4.4--auth
    -v: 将宿主机的/docker_volume/mongodb/data映射到容器的/data/db目录,将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失
    –auth:需要密码才能访问容器服务

    2.创建用户

    登录mongo容器,并进入到【admin】数据库

    dockerexec-itmongomongoadmin

    创建一个用户,mongo 默认没有用户

    db.createUser({<!--{C}%3C!%2D%2D%20%2D%2D%3E-->user:'root',pwd:'123456',roles:[{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->role:'userAdminAnyDatabase',db:'admin'},'readWriteAnyDatabase']});

    【user:&lsquo;root&rsquo; 】:设置用户名为root
    【pwd:&lsquo;123456&rsquo;】:设置密码为123456
    【role:&lsquo;userAdminAnyDatabase&rsquo;】:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    【db: &lsquo;admin&rsquo;】:可操作的数据库
    【&lsquo;readWriteAnyDatabase&rsquo;】:赋予用户读写权限

    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    3. 连接、测试

    连接mongo数据库

    db.auth('root','123456')

    测试数据库,插入一条语句

    db.user.insert({<!--{C}%3C!%2D%2D%20%2D%2D%3E-->"name":"zhangsan","age":18})

    测试数据库,查询刚才插入的语句

    db.user.find()

    navicat连接测试

    三、SpringBoot整合mongoDB

    导入坐标

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.3.9.RELEASE</version></dependency>

    添加yml配置

    spring:data:mongodb:uri:mongodb://192.156.136.168:27017/testdbusername:rootpassword:123456

    编写实体类

    importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importorg.bson.types.ObjectId;importorg.springframework.data.annotation.Id;importorg.springframework.data.mongodb.core.mapping.Document;importorg.springframework.data.mongodb.core.mapping.Field;@Data@AllArgsConstructor@NoArgsConstructor//指定实体类和数据库文档的映射关系默认实体类名数据库如果没有该文档,会自动创建@Document(value="tb_person")publicclassPerson{@IdprivateObjectIdid;//mongoDB推荐使用ID//指定属性名和数据库域的映射关系默认属性名@Field("person_name")privateStringname;privateintage;privateStringaddress;}

    1.@Document(value=“tb_person”) :指定实体类和数据库文档的映射关系 默认实体类名 数据库如果没有该文档,会自动创建
    2. @Field(“person_name”): //指定属性名和数据库域的映射关系 默认属性名

    测试类

    importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.data.domain.Sort;importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importorg.springframework.test.context.junit4.SpringRunner;/***多条件查询*/@Testpublicvoidfind(){//设置查询条件age小于30,且person_name="张三"Criteriacriteria=Criteria.where("age").lt(30).and("person_name").is("张三");//设置查询条件Queryquery=newQuery(criteria);//查询List<Person>list=mongoTemplate.find(query,Person.class);for(Personperson:list){System.out.println(person);}}/***分页查询*/@TestpublicvoidfindPage(){//设置查询条件age小于30,且person_name="张三"Criteriacriteria=Criteria.where("age").lt(30).and("person_name").is("张三");//根据条件查询总数QueryqueryCount=newQuery(criteria);longcount=mongoTemplate.count(queryCount,Person.class);//查询当前页的数据列表,查询第二页,每页查询2条QueryqueryLimit=newQuery(criteria).with(Sort.by(Sort.Order.desc("age"))).limit(2)//每页查询条数.skip(2);//从第几页开始(page-1)*sizeList<Person>list=mongoTemplate.find(queryLimit,Person.class);for(Personperson:list){System.out.println(person);}}/***更新数据*/@Testpublicvoidupdate(){//设置查询条件age小于30,且person_name="张三"Criteriacriteria=Criteria.where("person_name").is("王五");//设置更新条件Queryquery=newQuery(criteria);//设置更新数据Updateupdate=newUpdate();update.set("age",16);mongoTemplate.upsert(query,update,Person.class);}/***保存*/@Testpublicvoidsave(){Personperson=newPerson();person.setName("张三");person.setAge(18);mongoTemplate.save(person);}/***删除数据*/@Testpublicvoiddlete(){mongoTemplate.remove(Query.query(Criteria.where("person_name").is("张三")),Person.class);}

    mongoDB索引

    提示:1 :升序索引 -1 :降序索引

    #查看索引db.user.getIndexes()#创建索引#db.user.createIndex({'age':1})

    四、mongoDB原生使用

    新增

    db.tb_person.insert({person_name:"陈六",age:16})

    修改

    --普通修改db.tb_person.update({age:16},{$set:{person_name:"张三"}})

    修改格式:db.collection.update(query, update, [ upsert: boolean, multi: boolean, writeConcern: document])

    db.tb_person.update({age:16},{$set:{person_name:"张三"}},{upsert:true,multi:true})--upsert(默认false):可选,如果不存在update的记录,是否保存。true为保存。--multi(默认false):可选,默认只更新第一条记录。true:更新所有匹配数据--writeConcern:可选,抛出异常的级别

    删除

    --普通删除db.tb_person.remove({person_name:"张三"})

    删除格式:db.collection.remove(query, update, [ justOne: boolean, writeConcern: document])

    db.tb_person.remove({person_name:"张三"},false)--justOne:(可选)true:删除第一个匹配记录,false:删除所有--writeConcern:(可选)抛出异常的级别

    查询

    --查询person_name=张三或者年龄18db.tb_person.find({$or:[{person_name:"张三"},{age:18}]})--分页查询以年龄升序排序跳过第1条数据,查询后面2条数据db.tb_person.find().sort({age:1}).limit(2).skip(1)--查询年龄小于等于21的数据,以年龄降序排序db.tb_person.find({age:{$lte:21}}).sort({age:-1})

    常用查询条件

    中文符号
    小于$lt:
    大于$gt:
    小于或等于$lte:
    大于或等于$gte:
    不等于$ne:

    到此,关于“docker安装mongoDB及使用方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注主机评测网网站,小编会继续努力为大家带来更多实用的文章!


    上一篇:MD5算法原理及C#和JS实现的方法是什么

    下一篇:Reactor模型如何实现


    Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
    温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
    热门搜索