日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 一、mongoDB是什么?
    • 1. mongo的體系結構
    • 2. mongoDB的特點(或使用場景)
    • 3. mongoDB與mysql、redis對比
    • 4. mongoDB存儲原理
  • 二、使用docker安裝mongo
    • 1.安裝
    • 2.創建用戶
    • 3. 連接、測試
  • 三、SpringBoot整合mongoDB
    • 四、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:‘root’ 】:設置用戶名為root
        【pwd:‘123456’】:設置密碼為123456
        【role:‘userAdminAnyDatabase’】:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
        【db: ‘admin’】:可操作的數據庫
        【‘readWriteAnyDatabase’】:賦予用戶讀寫權限

        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 使用方法 安裝 服務器 詳解
        用戶無頭像

        網友整理

        注冊時間:

        網站:5 個   小程序:0 個  文章:12 篇

        • 51998

          網站

        • 12

          小程序

        • 1030137

          文章

        • 747

          會員

        趕快注冊賬號,推廣您的網站吧!
        最新入駐小程序

        數獨大挑戰2018-06-03

        數獨一種數學游戲,玩家需要根據9

        答題星2018-06-03

        您可以通過答題星輕松地創建試卷

        全階人生考試2018-06-03

        各種考試題,題庫,初中,高中,大學四六

        運動步數有氧達人2018-06-03

        記錄運動步數,積累氧氣值。還可偷

        每日養生app2018-06-03

        每日養生,天天健康

        體育訓練成績評定2018-06-03

        通用課目體育訓練成績評定