欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker安裝mongoDB及使用方法詳解

 更新時(shí)間:2023年03月16日 14:34:20   作者:要加油!  
這篇文章主要給大家介紹了關(guān)于docker安裝mongoDB及使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、mongoDB是什么?

MongoDB是一個(gè)NoSQL的非關(guān)系型數(shù)據(jù)庫(kù) ,支持海量數(shù)據(jù)存儲(chǔ),高性能的讀寫。

1. mongo的體系結(jié)構(gòu)

  • mongo中的集合相當(dāng)于mysql中表的概念;
  • mongo中的文檔相當(dāng)于mysql中行的概念;
  • mongo中的域相當(dāng)于mysql中字段/列的概念;

2. mongoDB的特點(diǎn)(或使用場(chǎng)景)

  • 支持存儲(chǔ)海量數(shù)據(jù);(例如:直播中的打賞數(shù)據(jù));
  • 支持頻繁的數(shù)據(jù)讀寫;(例如:游戲道具);
  • 數(shù)據(jù)安全性不高,存在數(shù)據(jù)誤差(丟失數(shù)據(jù));
  • mongoDB不支持多表操作,不支持事務(wù);
  • mongoDB使用Bson存儲(chǔ)格式,支持動(dòng)態(tài)字段管理;

3. mongoDB與mysql、redis對(duì)比

與redis對(duì)比

1. redis純內(nèi)存數(shù)據(jù)庫(kù),內(nèi)存不足時(shí)觸發(fā)淘汰策略,mongoDB使用內(nèi)存加磁盤的存儲(chǔ)策略具有高擴(kuò)展性;

2. mongoDB使用Bson存儲(chǔ)格式,支持動(dòng)態(tài)字段管理方便擴(kuò)展;

與mysql對(duì)比

1. mongoDB不支持多表操作,不支持事務(wù);

2. mongoDB使用Bson存儲(chǔ)格式,支持動(dòng)態(tài)字段管理;

查詢效率對(duì)比

Redis > MongoDB > MySQL

4. mongoDB存儲(chǔ)原理

  1. mongoDb采用內(nèi)存加磁盤的方式存儲(chǔ)數(shù)據(jù);
  2. mongoDb支持?jǐn)?shù)據(jù)分片,當(dāng)單一的服務(wù)器中磁盤不夠用的時(shí)候,還可以串聯(lián)其他服務(wù)器;
  3. 客戶端的請(qǐng)求到達(dá)內(nèi)存時(shí),先在日志中記錄下操作記錄,然后再去操作內(nèi)存;
  4. 內(nèi)存中的日志每10ms向磁盤中的日志進(jìn)行同步一次,數(shù)據(jù)則每分鐘同步一次;
  5. 客戶端先去內(nèi)存中查詢數(shù)據(jù),內(nèi)存中沒(méi)有再去查詢磁盤;
  6. 當(dāng)客戶端寫入的時(shí)候,會(huì)先寫入到內(nèi)存中,內(nèi)存中寫入后請(qǐng)求直接返回,內(nèi)存中的數(shù)據(jù)會(huì)根據(jù)同步策略同步到磁盤;
  7. 如果機(jī)器宕機(jī),在重啟服務(wù)的時(shí)候會(huì)解析磁盤中的日志和磁盤中的數(shù)據(jù)進(jìn)行對(duì)比,將未入到磁盤中的數(shù)據(jù)寫入磁盤,但可能會(huì)丟失10ms的數(shù)據(jù);

二、使用docker安裝mongo

1.安裝

拉取mongo鏡像

 docker pull mongo:4.4

創(chuàng)建mongo數(shù)據(jù)持久化目錄

mkdir -p /docker_volume/mongodb/data

運(yùn)行容器

docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth
-v: 將宿主機(jī)的/docker_volume/mongodb/data映射到容器的/data/db目錄,將數(shù)據(jù)持久化到宿主機(jī),以防止刪除容器后,容器內(nèi)的數(shù)據(jù)丟失
–auth:需要密碼才能訪問(wèn)容器服務(wù)

2.創(chuàng)建用戶

登錄mongo容器,并進(jìn)入到【admin】數(shù)據(jù)庫(kù)

docker exec -it mongo mongo admin

創(chuàng)建一個(gè)用戶,mongo 默認(rèn)沒(méi)有用戶

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:‘root’ 】:設(shè)置用戶名為root
【pwd:‘123456’】:設(shè)置密碼為123456
【role:‘userAdminAnyDatabase’】:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的userAdmin權(quán)限
【db: ‘admin’】:可操作的數(shù)據(jù)庫(kù)
【‘readWriteAnyDatabase’】:賦予用戶讀寫權(quán)限

dbAdmin:允許用戶在指定數(shù)據(jù)庫(kù)中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問(wèn)system.profile

3. 連接、測(cè)試

連接mongo數(shù)據(jù)庫(kù)

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

測(cè)試數(shù)據(jù)庫(kù),插入一條語(yǔ)句

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

測(cè)試數(shù)據(jù)庫(kù),查詢剛才插入的語(yǔ)句

db.user.find()

navicat連接測(cè)試

三、SpringBoot整合mongoDB

導(dǎo)入坐標(biāo)

        <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/testdb
      username: root
      password: 123456

編寫實(shí)體類

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Data
@AllArgsConstructor
@NoArgsConstructor
//指定實(shí)體類和數(shù)據(jù)庫(kù)文檔的映射關(guān)系    默認(rèn)實(shí)體類名  數(shù)據(jù)庫(kù)如果沒(méi)有該文檔,會(huì)自動(dòng)創(chuàng)建
@Document(value="tb_person")
public class Person {
    @Id
    private ObjectId id; //mongoDB推薦使用ID
    //指定屬性名和數(shù)據(jù)庫(kù)域的映射關(guān)系   默認(rèn)屬性名
    @Field("person_name")
    private String name;
    private int age;
    private String address;
}

1.@Document(value=“tb_person”) :指定實(shí)體類和數(shù)據(jù)庫(kù)文檔的映射關(guān)系 默認(rèn)實(shí)體類名 數(shù)據(jù)庫(kù)如果沒(méi)有該文檔,會(huì)自動(dòng)創(chuàng)建
2. @Field(“person_name”): //指定屬性名和數(shù)據(jù)庫(kù)域的映射關(guān)系 默認(rèn)屬性名

測(cè)試類

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
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.test.context.junit4.SpringRunner;
  
    /**
     * 多條件查詢
     */
    @Test
    public void find() {
        //設(shè)置查詢條件 age小于30,且person_name="張三"
        Criteria criteria = Criteria.where("age").lt(30)
                .and("person_name").is("張三");
        
        //設(shè)置查詢條件
        Query query = new Query(criteria);
        //查詢
        List<Person> list = mongoTemplate.find(query, Person.class);

        for (Person person : list) {
            System.out.println(person);
        }
    }

    /**
     * 分頁(yè)查詢
     */
    @Test
    public void findPage() {
        //設(shè)置查詢條件 age小于30,且person_name="張三"
        Criteria criteria = Criteria.where("age").lt(30)
                .and("person_name").is("張三");

        //根據(jù)條件 查詢總數(shù)
        Query queryCount = new Query(criteria);
        long count = mongoTemplate.count(queryCount, Person.class);


        //查詢當(dāng)前頁(yè)的數(shù)據(jù)列表, 查詢第二頁(yè),每頁(yè)查詢2條
        Query queryLimit = new Query(criteria)
                .with(Sort.by(Sort.Order.desc("age")))
                .limit(2)//每頁(yè)查詢條數(shù)
                .skip(2); //從第幾頁(yè)開(kāi)始 (page-1)*size

        List<Person> list = mongoTemplate.find(queryLimit, Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }
    
    /**
     * 更新數(shù)據(jù)
     */
    @Test
    public void update() {
        //設(shè)置查詢條件 age小于30,且person_name="張三"
        Criteria criteria = Criteria.where("person_name").is("王五");
        //設(shè)置更新條件
        Query query = new Query(criteria);
        //設(shè)置更新數(shù)據(jù)
        Update update = new Update();
        update.set("age", 16);
        mongoTemplate.upsert(query, update, Person.class);
    }

    /**
     * 保存
     */
    @Test
    public void save() {
        Person person = new Person();
        person.setName("張三");
        person.setAge(18);
        mongoTemplate.save(person);
    }
    
    /**
     * 刪除數(shù)據(jù)
     */
    @Test
    public void dlete() {
        mongoTemplate.remove(Query.query(Criteria.where("person_name").is("張三")), Person.class);
    }

mongoDB索引

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

#查看索引
db.user.getIndexes()
#創(chuàng)建索引
#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 (默認(rèn)false ) : 可選,如果不存在update的記錄,是否保存。true為保存。
	--  multi(默認(rèn)false ) : 可選,默認(rèn)只更新第一條記錄。true:更新所有匹配數(shù)據(jù)
	--  writeConcern :可選,拋出異常的級(jí)別

刪除

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

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

db.tb_person.remove({person_name: "張三"}, false)

	-- justOne: (可選)true:刪除第一個(gè)匹配記錄,false:刪除所有
	-- writeConcern :(可選)拋出異常的級(jí)別

查詢

--  查詢person_name=張三 或者 年齡 18
db.tb_person.find({$or:[{person_name: "張三"},{age:18 }]}) 

-- 分頁(yè)查詢  以年齡升序排序 跳過(guò)第1條數(shù)據(jù),查詢后面2條數(shù)據(jù)
db.tb_person.find().sort({age:1}).limit(2).skip(1)  

-- 查詢年齡小于等于21的數(shù)據(jù),以年齡降序排序
db.tb_person.find({age:{$lte:21}}).sort({age:-1}) 

常用查詢條件

中文符號(hào)
小于$lt:
大于$gt:
小于或等于$lte:
大于或等于$gte:
不等于$ne:

總結(jié) 

到此這篇關(guān)于docker安裝mongoDB及使用方法的文章就介紹到這了,更多相關(guān)docker安裝mongoDB內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn)

    Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn)

    本文主要介紹了Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn),通過(guò)部署和配置幫助讀者更好地理解并應(yīng)用這些工具,感興趣的可以了解一下
    2023-12-12
  • 使用Docker安裝phabricator的配置和使用方法

    使用Docker安裝phabricator的配置和使用方法

    今天小編就為大家分享一篇關(guān)于使用Docker安裝phabricator的配置和使用方法的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • windows使用docker部署gitlab方式

    windows使用docker部署gitlab方式

    這篇文章主要介紹了windows使用docker部署gitlab方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)

    Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)

    Docker是一個(gè)開(kāi)源的容器引擎,基于go語(yǔ)言開(kāi)發(fā)并遵循了apache2.0協(xié)議開(kāi)源,下面這篇文章主要給大家介紹了關(guān)于Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • docker 編輯Dockerfile 添加php7.2 acpu的問(wèn)題

    docker 編輯Dockerfile 添加php7.2 acpu的問(wèn)題

    這篇文章主要介紹了docker 編輯Dockerfile 添加php7.2 acpu問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Docker容器網(wǎng)絡(luò)互聯(lián)的項(xiàng)目實(shí)踐

    Docker容器網(wǎng)絡(luò)互聯(lián)的項(xiàng)目實(shí)踐

    docker中的容器都是連接到一個(gè)虛擬的網(wǎng)橋上的,這為獨(dú)立的容器提供了互聯(lián)的可能,本文主要介紹了Docker容器網(wǎng)絡(luò)互聯(lián)的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • IDEA部署Docker到WSL2的詳細(xì)過(guò)程

    IDEA部署Docker到WSL2的詳細(xì)過(guò)程

    這篇文章主要介紹了IDEA 部署 Docker 到 WSL2的過(guò)程詳解,本地環(huán)境Windows10+WSL2(Ubuntu),具體操作過(guò)程跟隨小編一起看看吧
    2021-07-07
  • Idea部署遠(yuǎn)程Docker并配置文件

    Idea部署遠(yuǎn)程Docker并配置文件

    這篇文章給大家介紹Idea部署遠(yuǎn)程Docker并添加配置文件的方法及修改項(xiàng)目pom文件的代碼解析,對(duì)idea部署遠(yuǎn)程docker相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • 詳解Docker學(xué)習(xí)之用commit命令創(chuàng)建鏡像

    詳解Docker學(xué)習(xí)之用commit命令創(chuàng)建鏡像

    這篇文章主要介紹了詳解Docker學(xué)習(xí)之用commit命令創(chuàng)建鏡像,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Linux Docker運(yùn)行springboot項(xiàng)目的步驟詳解

    Linux Docker運(yùn)行springboot項(xiàng)目的步驟詳解

    這篇文章主要介紹了Linux Docker運(yùn)行springboot項(xiàng)目的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評(píng)論