MongoDB快速入門常用命令

      網(wǎng)友投稿 749 2022-05-29

      在工作室聽聞老師要安排班上學(xué)生做 MongoDB 實訓(xùn),身為工作室灌水王的我,整理了份 MongoDB 的學(xué)習(xí)入門資料,下面記錄一下入門時經(jīng)常使用到的mongoDB語句。

      一、 關(guān)于 MongoDB

      MongoDB 是開源文檔數(shù)據(jù)庫,是一個基于分布式文件存儲的非關(guān)系型數(shù)據(jù)庫。

      MongoDB的基本概念是文檔(document)、集合(collection)、數(shù)據(jù)庫(database),文檔是核心單元,像 {c:1} ; {s:“abcde”} 等,多個文檔組成一個集合(相當(dāng)于關(guān)系數(shù)據(jù)庫的表)。

      文檔的數(shù)據(jù)結(jié)構(gòu)和JSON基本一樣,以 JSON 格式的文檔保存數(shù)據(jù)。

      所有存儲在集合中的數(shù)據(jù)都是BSON格式,采用BSON存儲文檔數(shù)據(jù)。(BSON是一種類json的一種二進制形式的存儲格式)

      二、 安裝 MongoDB

      在瀏覽器輸入localhost:27017 (MongoDB的端口號是27017),

      查看是否連接成功。

      也可以在任務(wù)管理器用鼠標(biāo)操作 啟動 、關(guān)閉 。

      MongoDB快速入門之常用命令

      三、 使用 MongoDB

      創(chuàng)建數(shù)據(jù)庫 (如果數(shù)據(jù)庫名不存在,則創(chuàng)建;否則切換指定數(shù)據(jù)庫)

      use 數(shù)據(jù)庫名

      查看所有數(shù)據(jù)庫

      show dbs

      查看當(dāng)前數(shù)據(jù)庫 (MongoDB默認(rèn)的數(shù)據(jù)庫為test,如果沒有創(chuàng)建新的數(shù)據(jù)庫,集合將存放在test數(shù)據(jù)庫中)

      db //剛創(chuàng)建的數(shù)據(jù)庫并不在數(shù)據(jù)庫列表中,要顯示它,需要向該數(shù)據(jù)庫中插入數(shù)據(jù)

      刪除數(shù)據(jù)庫 (刪除當(dāng)前數(shù)據(jù)庫)

      db.dropDatabase()

      創(chuàng)建集合

      db.createCollection('name',options) //例如:db.createCollection('student')

      查詢數(shù)據(jù)庫中所有集合

      show collections

      對集合重命名

      db.舊名.renameCollection('new name')

      刪除集合

      db.集合名.drop()

      特點:

      可以聲明集合容量的大小。

      插入數(shù)據(jù)時,新文檔會被插到隊列末尾,當(dāng)隊列被占滿時,最老的文檔會被覆蓋。

      適用于想要自動刪除屬性的地方(比如日志、記錄等只需保留最近時間內(nèi)的應(yīng)用情景)。

      寫入速度快(不建立索引;寫入磁盤上的固定空間,所以不會因為其他集合一些隨機性的寫入操作而中斷)。

      注意:

      創(chuàng)建后不能更改,只能刪除或重建。

      固定集合不能轉(zhuǎn)為普通集合。

      不能進行分片,不能刪除文檔(可以刪除整個集合)。

      可以進行更新(update),但更新不能讓文檔的size發(fā)生變化。

      創(chuàng)建固定集合

      db.createCollection("name",{capped,size}) /*例如:創(chuàng)建固定集合AAA,大小限制為1024個字節(jié),文檔數(shù)量限制為100。 db.createCollection("AAA",{capped:true,size:1024,max:100}) */

      普通集合轉(zhuǎn)固定集合 (沒有限制文檔數(shù)量的參數(shù),即沒有max的參數(shù)選項)

      db.runCommand({"convertToCapped":"集合名","size":字節(jié)大小}) /*例如:將col集合轉(zhuǎn)換為一個大小為1024字節(jié)的固定集合。 db.runCommand({"convertToCapped":"col","size":1024}) */

      判斷是否為固定集合 (判斷后顯示true或者false)

      db.集合.isCapped()

      查看集合屬性

      db.集合.stats()

      使用 insert() 或 save() 向集合中插入文檔(如果該集合不在該數(shù)據(jù)庫中, MongoDB 會自動創(chuàng)建該集合并插入文檔)。

      兩者的區(qū)別:

      當(dāng)插入重復(fù)數(shù)據(jù)時:若新增數(shù)據(jù)的主鍵已經(jīng)存在,insert會提示異常,不保存當(dāng)前數(shù)據(jù);save則會對當(dāng)前已經(jīng)存在的數(shù)據(jù)進行修改操作。

      批操作時:insert可以一次性插入;而save需要一個個地插入。

      插入單個文檔

      db.集合名.insert({需要插入的內(nèi)容}) //例如:db.stuinfo.insert({_id:001,name:'alice',age:18})

      插入單個文檔(先定義再插入)

      //定義一個值,再插入這個值 /*例如:s={_id:5,name:'張三',age:19} db.stuinfo.insert(s) */

      插入多個文檔

      db.集合名.insert([{內(nèi)容},{內(nèi)容}]) //例如:db.foo.insert([{_id:3,name:'yu',age:18},{_id:4,name:'en',age:19}]) // 不要漏掉中括號

      插入多條數(shù)據(jù)

      //讓其自加,再插入 /*例如:for(var i=1;i<10;i++) db.col.insert({count:i,test2:false,test5:true}) */

      使用 update() 和 save() 方法來更新集合中的文檔。

      兩者的區(qū)別:

      update更新文檔

      db.集合.update({舊的},{$set:{新的}}) /*例如:db.stuinfo.update({name:'curry'},{$set:{name:'王五'}}) (以上語句只會修改第一條發(fā)現(xiàn)的文檔) 如果要修改多條相同的文檔,則需要設(shè)置 multi 參數(shù)為 true,如下: db.stuinfo.update({name:'curry'},{$set:{name:'王五'}},{multi:true}) */

      save更新文檔

      db.集合名.save({內(nèi)容}) //例如:db.stuinfo.save({_id:2,name:'curry',age:20})

      使用 remove(),deleteOne() 或 deleteMany() 方法移除集合中的數(shù)據(jù)。

      刪除全部文檔 (可以在括號內(nèi)加條件)

      db.集合名.deleteMany({}) 或 db.集合名.remove({}) //例如:db.foo.deleteMany({'test5':true})

      刪除全部文檔 (remove用法)

      db.集合.remove(,{justOne: }) /* 參數(shù)query:可選,刪除條件 參數(shù)justOne:可選,如果設(shè)為true或1,則只刪除一條;默認(rèn)為false 例如:只刪除年齡為18的一條數(shù)據(jù) db.foo.remove({'age':18},{justOne:1}) */

      刪除一個文檔

      db.集合名.deleteOne({}) //例如:db.foo.deleteOne({age:18})

      查詢文檔 (可在括號內(nèi)加查詢條件)

      db.集合名.find()

      查詢文檔 (只查詢第一條)

      db.集合名.findOne()

      查詢文檔 (格式化顯示)

      db.集合名.find().pretty()

      多條件查詢

      // 在括號內(nèi)加逗號分開條件 //例如:db.items.find({quantity:2,price:{$gte:4}})

      等于

      db.集合名.find({‘屬性’:條件}) //例如:db.items.find({price:20})

      小于 ($lt)

      db.集合名.find({‘屬性’:{$lt:條件}}) //例如:db.items.find({price:{$lt:5}})

      小于或等于 ($lte)

      db.集合.find({‘屬性’:{$lte:條件}}) //例如:db.items.find({price:{$lte:5}})

      大于 ($gt)

      db.集合名.find({‘屬性’:{$gt:條件}}) //例如:db.items.find({price:{$gt:5}})

      大于或等于 ($gte)

      db.集合.find({‘屬性’:{$gte:條件}}) //例如:db.items.find({price:{$gte:10}})

      不等于 ($ne)

      db.集合.find({‘屬性’:{$ne:條件}}) //例如:db.items.find({price:{$ne:20}})

      使用 $in 或者 $nin 判斷

      db.集合.find({屬性:{$in:[條件]}}) /*例如:查詢年齡為18、19、20的學(xué)生。 db.stuinfo.find({'age':{$in:[18,19,20]}}) */

      sort的用法(參數(shù)1為升序,-1為降序)

      db.集合.find().sort({屬性:參數(shù)}) /*例如:按照年齡升序排序。 db.stuinfo.find().sort({age:1}) 例如:按照年齡升序,主鍵降序排序。 db.stuinfo.find().sort({age:1,_id:-1}) */

      查詢指定數(shù)量的文檔

      db.集合.find().limit(數(shù)量) /*例如:查詢2條信息。 db.stuinfo.find().limit(2) */

      跳過指定數(shù)量的文檔再查詢

      db.集合.find().skip(數(shù)量) /*例如:跳過2條數(shù)據(jù)再查詢 db.stuinfo.find().skip(2) */

      以上可以同時使用

      //例如:db.stu.find().skip(5).limit(4)

      文檔通過一個或多個階段(stage)組成管道,對管道進行分組、過濾等功能。

      db.集合名.aggregate()

      db.集合.aggregate([{$group:{_id:’id的名稱’,’屬性名’:{$sum:"$要統(tǒng)計的內(nèi)容"}}}]) // 不要在要統(tǒng)計的內(nèi)容前漏掉 $

      使用聚合aggregate:

      /*例如:統(tǒng)計price的總和 db.foo.aggregate([{$group:{_id:null,’總數(shù)’:{$sum:"$price"}}}]) 例如:通過產(chǎn)品類型分組,再統(tǒng)計賣出的數(shù)量 db.foo.aggregate([{$group:{_id:"$mold",total:{$sum:"$BBBB"}}}]) */

      使用or語句(別漏掉中括號)

      db.集合名.find({$or:[{key1: value1}, {key2:value2}]}) /*例如:查詢AAA為10或價格大于等于5。 db.foo.find({$or:[{AAA:10},{price:{$gte:5}}]}) */

      /*例如:查詢AAA為“p003”且BBB為10或價格大于等于5的商品數(shù)據(jù)。 db.items.find({AAA:'p003',$or:[{BBB:10},{price:{$gte:5}}]}) */

      /*例如:將相同的產(chǎn)品類型進行分組,統(tǒng)計各個產(chǎn)品數(shù)量,然后獲取最大的數(shù)量。 db.items.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}},{$group:{_id:null,max:{$max:"$total"}}}]) */

      統(tǒng)計集合中文檔的數(shù)目 (可以在括號內(nèi)加條件)

      db.集合名.count() /*例如: db.foo.count() db.foo.count({sex:'man'}) */

      distinct的用法去重 (不要用大括號把去重字段也括進去)

      db.集合.distinct(‘去重字段’,{條件}) //例如: db.stuinfo.distinct('王五',{age:{$gt:29}})

      另外,推薦下載Navicat來管理數(shù)據(jù)庫,使用Navicat操作數(shù)據(jù)庫比較友好。

      MongoDB 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:深入剖析分布式文件系統(tǒng)HDFS
      下一篇:C Primer Plus 第02章 C語言概述 學(xué)習(xí)筆記及復(fù)習(xí)題、編程題解答
      相關(guān)文章
      亚洲伊人久久综合影院| 亚洲成?Ⅴ人在线观看无码| 自拍偷自拍亚洲精品第1页| 国产亚洲精品成人久久网站| 亚洲日产乱码一二三区别| 久久精品国产亚洲αv忘忧草| 亚洲国产精品福利片在线观看| 亚洲国产精品不卡毛片a在线| 亚洲AV永久无码天堂影院| 最新国产精品亚洲| 亚洲sss综合天堂久久久| 亚洲AV色吊丝无码| 亚洲国产日韩精品| 亚洲伊人久久大香线蕉AV| 亚洲色成人四虎在线观看| 亚洲色大成WWW亚洲女子| 亚洲AV色无码乱码在线观看| 青草久久精品亚洲综合专区| 国产成人不卡亚洲精品91| 国产精品亚洲专一区二区三区| 亚洲熟妇av午夜无码不卡| 亚洲欧美成人一区二区三区| 亚洲国产精品ⅴa在线观看| 亚洲精品GV天堂无码男同| 久久精品国产亚洲AV电影网| 成人伊人亚洲人综合网站222| 婷婷亚洲天堂影院| 亚洲综合激情另类专区| 国产成A人亚洲精V品无码| 久久久久亚洲AV无码专区首| 久久久无码精品亚洲日韩按摩| 婷婷久久久亚洲欧洲日产国码AV| 久久精品国产精品亚洲艾草网| 久久久亚洲精品视频| 激情内射亚洲一区二区三区| 亚洲国产精品综合福利专区| 亚洲性色精品一区二区在线| 久久精品国产亚洲AV天海翼| 久久久青草青青国产亚洲免观 | 亚洲精品视频免费| 中文字幕专区在线亚洲|