MongoDB快速入門之常用命令
在工作室聽聞老師要安排班上學(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
創(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(
刪除一個文檔
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)容。