您好,登錄后才能下訂單哦!
這篇文章主要介紹“docker安裝mongoDB及使用方法是什么”,在日常操作中,相信很多人在docker安裝mongoDB及使用方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”docker安裝mongoDB及使用方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
MongoDB是一個NoSQL的非關系型數據庫 ,支持海量數據存儲,高性能的讀寫。
mongo中的集合相當于mysql中表的概念;
mongo中的文檔相當于mysql中行的概念;
mongo中的域相當于mysql中字段/列的概念;
支持存儲海量數據;(例如:直播中的打賞數據);
支持頻繁的數據讀寫;(例如:游戲道具);
數據安全性不高,存在數據誤差(丟失數據);
mongoDB不支持多表操作,不支持事務;
mongoDB使用Bson存儲格式,支持動態字段管理;
與redis對比
1. redis純內存數據庫,內存不足時觸發淘汰策略,mongoDB使用內存加磁盤的存儲策略具有高擴展性;
2. mongoDB使用Bson存儲格式,支持動態字段管理方便擴展;
與mysql對比
1. mongoDB不支持多表操作,不支持事務;
2. mongoDB使用Bson存儲格式,支持動態字段管理;
查詢效率對比
Redis > MongoDB > MySQL
mongoDb采用內存加磁盤的方式存儲數據;
mongoDb支持數據分片,當單一的服務器中磁盤不夠用的時候,還可以串聯其他服務器;
客戶端的請求到達內存時,先在日志中記錄下操作記錄,然后再去操作內存;
內存中的日志每10ms向磁盤中的日志進行同步一次,數據則每分鐘同步一次;
客戶端先去內存中查詢數據,內存中沒有再去查詢磁盤;
當客戶端寫入的時候,會先寫入到內存中,內存中寫入后請求直接返回,內存中的數據會根據同步策略同步到磁盤;
如果機器宕機,在重啟服務的時候會解析磁盤中的日志和磁盤中的數據進行對比,將未入到磁盤中的數據寫入磁盤,但可能會丟失10ms的數據;
拉取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:需要密碼才能訪問容器服務
登錄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
連接mongo數據庫
db.auth('root', '123456')
測試數據庫,插入一條語句
db.user.insert({<!--{C}%3C!%2D%2D%20%2D%2D%3E-->"name":"zhangsan","age":18})
測試數據庫,查詢剛才插入的語句
db.user.find()
navicat連接測試
導入坐標
<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})
新增
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及使用方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。