中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2023-03-16 15:58:52 來源:億速云 閱讀:95 作者:iii 欄目:開發技術

這篇文章主要介紹“docker安裝mongoDB及使用方法是什么”,在日常操作中,相信很多人在docker安裝mongoDB及使用方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”docker安裝mongoDB及使用方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、mongoDB是什么?

    MongoDB是一個NoSQL的非關系型數據庫 ,支持海量數據存儲,高性能的讀寫。

    1. mongo的體系結構

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

    • 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存儲原理

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

    1. mongoDb采用內存加磁盤的方式存儲數據;

    2. mongoDb支持數據分片,當單一的服務器中磁盤不夠用的時候,還可以串聯其他服務器;

    3. 客戶端的請求到達內存時,先在日志中記錄下操作記錄,然后再去操作內存;

    4. 內存中的日志每10ms向磁盤中的日志進行同步一次,數據則每分鐘同步一次;

    5. 客戶端先去內存中查詢數據,內存中沒有再去查詢磁盤;

    6. 當客戶端寫入的時候,會先寫入到內存中,內存中寫入后請求直接返回,內存中的數據會根據同步策略同步到磁盤;

    7. 如果機器宕機,在重啟服務的時候會解析磁盤中的日志和磁盤中的數據進行對比,將未入到磁盤中的數據寫入磁盤,但可能會丟失10ms的數據;

    二、使用docker安裝mongo

    1.安裝

    拉取mongo鏡像

     docker pull mongo:4.4

    創建mongo數據持久化目錄

    mkdir -p /docker_volume/mongodb/data

    運行容器

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

    2.創建用戶

    登錄mongo容器,并進入到【admin】數據庫

    docker exec -it mongo mongo admin

    創建一個用戶,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()

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

    navicat連接測試

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

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

    編寫實體類

    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
    //指定實體類和數據庫文檔的映射關系    默認實體類名  數據庫如果沒有該文檔,會自動創建
    @Document(value="tb_person")
    public class Person {
        @Id
        private ObjectId id; //mongoDB推薦使用ID
        //指定屬性名和數據庫域的映射關系   默認屬性名
        @Field("person_name")
        private String name;
        private int age;
        private String address;
    }

    1.@Document(value=“tb_person”) :指定實體類和數據庫文檔的映射關系 默認實體類名 數據庫如果沒有該文檔,會自動創建
    2. @Field(“person_name”): //指定屬性名和數據庫域的映射關系 默認屬性名

    測試類

    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() {
            //設置查詢條件 age小于30,且person_name="張三"
            Criteria criteria = Criteria.where("age").lt(30)
                    .and("person_name").is("張三");
            
            //設置查詢條件
            Query query = new Query(criteria);
            //查詢
            List<Person> list = mongoTemplate.find(query, Person.class);
    
            for (Person person : list) {
                System.out.println(person);
            }
        }
    
        /**
         * 分頁查詢
         */
        @Test
        public void findPage() {
            //設置查詢條件 age小于30,且person_name="張三"
            Criteria criteria = Criteria.where("age").lt(30)
                    .and("person_name").is("張三");
    
            //根據條件 查詢總數
            Query queryCount = new Query(criteria);
            long count = mongoTemplate.count(queryCount, Person.class);
    
    
            //查詢當前頁的數據列表, 查詢第二頁,每頁查詢2條
            Query queryLimit = new Query(criteria)
                    .with(Sort.by(Sort.Order.desc("age")))
                    .limit(2)//每頁查詢條數
                    .skip(2); //從第幾頁開始 (page-1)*size
    
            List<Person> list = mongoTemplate.find(queryLimit, Person.class);
            for (Person person : list) {
                System.out.println(person);
            }
        }
        
        /**
         * 更新數據
         */
        @Test
        public void update() {
            //設置查詢條件 age小于30,且person_name="張三"
            Criteria criteria = Criteria.where("person_name").is("王五");
            //設置更新條件
            Query query = new Query(criteria);
            //設置更新數據
            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);
        }
        
        /**
         * 刪除數據
         */
        @Test
        public void dlete() {
            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=張三 或者 年齡 18
    db.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及使用方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    花莲市| 博湖县| 岳西县| 息烽县| 屯昌县| 五大连池市| 岐山县| 金秀| 麻城市| 南靖县| 阿拉善盟| 河南省| 剑阁县| 化州市| 绩溪县| 嘉义县| 兰西县| 丹巴县| 南京市| 信丰县| 东莞市| 错那县| 嘉峪关市| 长宁区| 武清区| 崇明县| 西贡区| 诸暨市| 云林县| 甘肃省| 那曲县| 开远市| 彭山县| 建阳市| 崇信县| 连山| 华坪县| 白山市| 汉阴县| 长乐市| 昭通市|