一瘩将、Mongodb數(shù)據(jù)庫 Day01
1.課程介紹
- 數(shù)據(jù)庫概述(了解)
- NoSQL和MongoDB簡介(了解)
- MongoDB安裝(掌握)
- MongoDB基本操作(掌握)
2.數(shù)據(jù)庫概述
2.1.引言
以上圖片是什么锐涯?
答案:車庫
車庫用來做什么犬辰?
答案:停放車輛嗦篱,換句話說:存儲(chǔ)汽車。
數(shù)據(jù)庫用來做什么幌缝?
答案:存儲(chǔ)數(shù)據(jù)灸促。
思考1:老師讓你匯總下本周遲到人數(shù),你如何記錄?
數(shù)據(jù)量比較小浴栽,用一個(gè)excel表格就存放遲到人的名單荒叼。
思考2:2016年四川高考成績?nèi)绾未鎯?chǔ)?
數(shù)據(jù)量大了典鸡,顯然excel不能滿足被廓,就需要存儲(chǔ)在數(shù)據(jù)庫里面。
不僅如此萝玷,很多企業(yè)都有自己的數(shù)據(jù)需要管理嫁乘,都需要使用數(shù)據(jù)庫。
2.2.什么是數(shù)據(jù)庫
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織球碉、存儲(chǔ)和管理數(shù)據(jù)的倉庫蜓斧,它產(chǎn)生于距今六十多年前,隨著信息技術(shù)和市場的發(fā)展睁冬,特別是二十世紀(jì)九十年代以后挎春,數(shù)據(jù)庫技術(shù)得到了更加快速的發(fā)展,應(yīng)用得更加廣泛豆拨。主要用它進(jìn)行管理各種系統(tǒng)的數(shù)據(jù)直奋,作為科學(xué)研究和決策的重要技術(shù)手段。
常見的數(shù)據(jù)庫有哪些:
下圖是2015年數(shù)據(jù)庫排行
關(guān)系型數(shù)據(jù)庫:Access mySql SqlServer oracle db2等辽装。
非關(guān)系型數(shù)據(jù)庫: MongoDB帮碰,Redis,HBase拾积,CouchDB等殉挽。
文檔型數(shù)據(jù)這個(gè)名字中,“文檔”兩個(gè)字很容易誤解拓巧。其實(shí)這個(gè)文檔就是 bson 斯碌。bson 是 json 的超集,比如 json 中沒法儲(chǔ)存二進(jìn)制類型肛度,而 bson 拓展了類型傻唾,提供了二進(jìn)制支持。mongodb 中存儲(chǔ)的一條條記錄都可以用 bson 來表示承耿。所以你也可以認(rèn)為冠骄,mongodb 是個(gè)存 bson 數(shù)據(jù)的數(shù)據(jù)庫。
數(shù)據(jù)庫是一門學(xué)科加袋,專門做數(shù)據(jù)庫運(yùn)維的人叫Database Administrator凛辣,簡稱DBA,有的DBA指深入專研一種數(shù)據(jù)庫职烧。
思考:在這兩天的學(xué)習(xí)過程中扁誓,對(duì)于我們web前端學(xué)科的同學(xué)來說防泵,我們?nèi)绾稳W(xué)它,掌握到什么程度蝗敢?
我們對(duì)大家的要求:
4捷泞、了解數(shù)據(jù)庫發(fā)展歷史。(面試用)
5寿谴、會(huì)安裝MongoDB和配置環(huán)境變量锁右。
6、學(xué)會(huì)常用的命令拭卿。
7骡湖、學(xué)會(huì)用后端語言進(jìn)行MongoDB的CRUD操作。
2.3.NoSQL簡介
NoSQL峻厚,指的是非關(guān)系型的數(shù)據(jù)庫响蕴。NoSQL有時(shí)也稱作Not Only SQL的縮寫,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱惠桃。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)浦夷。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式辜王,無需多余操作就可以橫向擴(kuò)展劈狐。
2.4MongoDB簡介
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫呐馆。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案肥缔。
MongoDB 是非關(guān)系型數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系型數(shù)據(jù)庫的汹来。
隨著大數(shù)據(jù)的不斷發(fā)展续膳,非關(guān)系型數(shù)據(jù)庫已經(jīng)變得越來越重要,相關(guān)的產(chǎn)品也都得到了飛速發(fā)展收班。而其中MongoDB更是佼佼者坟岔,作為高性能開源文檔數(shù)據(jù)庫,MongoDB以敏捷摔桦、可擴(kuò)展和對(duì)企業(yè)應(yīng)用友好而著稱社付,因其操作簡單、完全免費(fèi)邻耕、源碼公開等特點(diǎn)鸥咖,受到了IT從業(yè)人員的青睞,并被廣泛部署于實(shí)際的生產(chǎn)環(huán)境中兄世。
使用MongoDB的公司包括:BAT啼辣、360、Foursquare碘饼、Craiglist,熙兔、迪士尼、SAP艾恼、Intuit住涉、EA等。
很多大公司在用钠绍,并且越來越多的公司也要用舆声,我們以后就可能接觸到相關(guān)的項(xiàng)目,雖然數(shù)據(jù)庫是后端人員做的事情柳爽,但是做為高級(jí)前端媳握,有必要對(duì)它有所了解,才更好的和后端開發(fā)人員合作磷脯,做到知己知彼蛾找,百戰(zhàn)不殆。
2.5. MongoDB優(yōu)點(diǎn)
它的特點(diǎn)是高性能赵誓、易部署打毛、易使用,存儲(chǔ)數(shù)據(jù)非常方便俩功。主要功能特性有:
2幻枉、面向集合存儲(chǔ),易存儲(chǔ)對(duì)象類型的數(shù)據(jù)诡蜓。
3熬甫、模式自由。
4蔓罚、支持動(dòng)態(tài)查詢椿肩。
5、支持完全索引脚粟,包含內(nèi)部對(duì)象覆旱。
6、支持查詢核无。
7扣唱、支持復(fù)制和故障恢復(fù)。
8团南、使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ)噪沙,包括大型對(duì)象(如視頻等)。
9吐根、自動(dòng)處理碎片正歼,以支持云計(jì)算層次的擴(kuò)展性
10、支持RUBY拷橘,PYTHON局义,JAVA喜爷,C++,PHP等多種語言萄唇。
11檩帐、文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)
2.6 BSON
BSON是一種類似json的二進(jìn)制形式的存儲(chǔ)格式,簡稱Binary JSON另萤,它和JSON一樣湃密,支持內(nèi)嵌的文檔對(duì)象和數(shù)組對(duì)象,但是BSON有JSON沒有的一些數(shù)據(jù)類型四敞,如Date和BinData類型泛源。
BSON可以做為網(wǎng)絡(luò)數(shù)據(jù)交換的一種存儲(chǔ)形式,這個(gè)有點(diǎn)類似于Google的Protocol Buffer忿危,但是BSON是一種schema-less的存儲(chǔ)形式达箍,它的優(yōu)點(diǎn)是靈活性高,但它的缺點(diǎn)是空間利用率不是很理想铺厨。
BSON有三個(gè)特點(diǎn):輕量性幻梯、可遍歷性、高效性努释。
后面大家會(huì)看到我們存在數(shù)據(jù)庫里面的全部都是bson格式的數(shù)據(jù)碘梢。
2.7非關(guān)系型數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫區(qū)別
非關(guān)系型數(shù)據(jù)庫的優(yōu)勢(shì):
1. 性能
NOSQL是基于鍵值對(duì)的,可以想象成表中的主鍵和值的對(duì)應(yīng)關(guān)系伐蒂,而且不需要經(jīng)過SQL層的解析煞躬,所以性能非常高。
2. 可擴(kuò)展性
同樣也是因?yàn)榛阪I值對(duì)逸邦,數(shù)據(jù)之間沒有耦合性恩沛,所以非常容易水平擴(kuò)展。
關(guān)系型數(shù)據(jù)庫的優(yōu)勢(shì):
1. 復(fù)雜查詢
可以用SQL語句方便的在多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢缕减。
2. 事務(wù)支持
使得對(duì)于安全性能很高的數(shù)據(jù)訪問要求得以實(shí)現(xiàn)雷客。
總結(jié):
? 數(shù)據(jù)庫功能是用來存儲(chǔ)數(shù)據(jù)的。
? 數(shù)據(jù)庫分為關(guān)系系數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫(nosql)
? 關(guān)系型數(shù)據(jù)庫是由表和表之間的關(guān)系組成的桥狡,nosql是由集合組成的搅裙,集合下面是很多的文檔。
? 非關(guān)系型數(shù)據(jù)庫文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)裹芝。
3. 準(zhǔn)備工作
3.1. MongoDB下載與安裝
MongoDB官網(wǎng)地址:
<u>https://www.mongodb.com/</u>
MongoDB下載地址:
<u>https://www.mongodb.com/download-center#community</u>
MongoDB for Windows 64-bit 適合 64 位的 Windows Server 2008 R2, Windows 7 , 及最新版本的 Window 系統(tǒng)部逮。
MongoDB for Windows 32-bit 適合 32 位的 Window 系統(tǒng)及最新的 Windows Vista。 32 位系統(tǒng)上 MongoDB 的數(shù)據(jù)庫最大為 2GB嫂易。
1.選擇適合自己系統(tǒng)的版本進(jìn)行下載:
2.根據(jù)你的系統(tǒng)下載 32 位或 64 位的 .msi 文件兄朋,下載后雙擊該文件,按操作提示安裝即可怜械。
3.勾選同意協(xié)議:
4.選擇完整安裝:
你可以通過點(diǎn)擊 "Custom(自定義)" 按鈕來設(shè)置你的安裝目錄
安裝過程如下:
5.看到上面的界面表示已經(jīng)安裝完成颅和。
安裝完成后效果:
3.2.MongoVUE安裝
MongoVUE可以提高你使用MongoDB的幸福指數(shù)傅事,他是MongoDB的可視化界面管理工具。
雙擊Installer.msi 安裝峡扩,默認(rèn)安裝在C:\Program Files (x86)\MongoVUE
第二步:使用破解版的MongoVUE.exe覆蓋安裝目錄下的MongoVUE.exe享完。
4.MongoDB的安裝(重點(diǎn))
4.1.基本操作
對(duì)mongodb數(shù)據(jù)庫的操作是通過執(zhí)行命令來完成的,我的電腦里面這些命令安裝在:
C:\Program Files\MongoDB\Server\3.2\bin
要執(zhí)行這些命令有额,需要以管理員身份運(yùn)行cmd。
打開開始菜單彼绷,找到命令提示符巍佑,在上面點(diǎn)擊右鍵,選擇以管理員身份運(yùn)行寄悯。
要想執(zhí)行mongodb的命令萤衰,需要cd到他的安裝目錄下面的bin文件夾下。
為了在dos窗口的任何目錄下都能執(zhí)行mongo的命令猜旬,需要先設(shè)置環(huán)境變量脆栋,因?yàn)橛?jì)算機(jī)在執(zhí)行命令的時(shí)候會(huì)在環(huán)境變量中找對(duì)應(yīng)的命令。
不同的操作系統(tǒng)設(shè)置環(huán)境變量的步驟大同小異洒擦。
Win10操作系統(tǒng)下設(shè)置環(huán)境變量如下圖拄氯。
4.2.設(shè)置環(huán)境變量
Win7下設(shè)置環(huán)境變量:
第一步:我的電腦上點(diǎn)擊右鍵能犯,選擇屬性
第二步:找到并打開“高級(jí)系統(tǒng)配置”。
在接下來的頁面中點(diǎn)擊“高級(jí)系統(tǒng)配置”,打開“系統(tǒng)屬性”窗口介衔。
第三步:找到“環(huán)境變量”按鈕并點(diǎn)擊。
第四部:在環(huán)境變量窗口中一般有兩個(gè)變量行疏,一個(gè)是你當(dāng)前所使用的用戶獨(dú)有的環(huán)境變量弱匪,另一個(gè)是所有用戶都可以訪問的系統(tǒng)變量。其實(shí)如果在你的電腦上你只使用一個(gè)用戶的話昧狮,那么不管你修改的用戶的環(huán)境變量還是系統(tǒng)變量景馁,效果都是一樣的。為了以防未來會(huì)新建其他用戶逗鸣,那么我建議你修改系統(tǒng)變量而不是某個(gè)用戶獨(dú)有的環(huán)境變量合住。
在變量值最后加上分號(hào) ;C:\Program Files\MongoDB\Server\3.2\bin
然后保存。
4.3.創(chuàng)建文件夾
我們之前安裝的其實(shí)是數(shù)據(jù)服務(wù)器撒璧,通過數(shù)據(jù)庫服務(wù)器可以建立很多個(gè)數(shù)據(jù)庫聊疲,我們打算把新建的數(shù)據(jù)庫放哪里呢?需要指定一個(gè)位置沪悲。
1.在d盤建立一個(gè)文件夾mongodb获洲,并且建立子目錄db和log.
2.在log目錄下建立一個(gè)文件MongoDB.log ,后綴為.log.
d:\mongodb\db殿如、d:\mongodb\log贡珊, 分別用來存放數(shù)據(jù)庫文件和數(shù)據(jù)庫日志文件.
3最爬、把mongodb文件夾的只讀屬性去掉。
4.4.啟動(dòng)MongoDB
以管理員身份運(yùn)行cmd.exe门岔,進(jìn)入dos命令界面爱致,執(zhí)行下列命令
mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log"
執(zhí)行后,就掛起了寒随,需要另外開命令窗口測試是否啟動(dòng)成功糠悯。
4.5.測試連接
原來的cmd窗口不關(guān)閉,以管理員身份再開一個(gè)cmd窗口妻往,輸入mongo或者mongo.exe互艾,出現(xiàn)如下信息說明測試通過,此時(shí)我們已經(jīng)進(jìn)入了test這個(gè)數(shù)據(jù)庫讯泣。
從上圖可以看出纫普,我們進(jìn)入了mongodb的shell
輸入exit或者ctrl+C可退出。
4.6.將MongoDB安裝為windows服務(wù)(重點(diǎn)中的重點(diǎn))
當(dāng)mongod.exe被關(guān)閉時(shí)好渠,mongo.exe 就無法連接到數(shù)據(jù)庫了昨稼,因此每次想使用mongodb數(shù)據(jù)庫都要開啟mongod.exe程序,所以比較麻煩拳锚,此時(shí)我們可以將MongoDB安裝為windows服務(wù)
以管理員身份運(yùn)行cmd假栓,進(jìn)入bin文件夾,執(zhí)行下列命令
mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"
這里MongoDB.log就是開始建立的日志文件霍掺,--serviceName "MongoDB" 服務(wù)名為MongoDB
接著啟動(dòng)mongodb服務(wù)
> NET START MongoDB
打開任務(wù)管理器但指,可以看到進(jìn)程已經(jīng)啟動(dòng)。
再次測試連接
> mongo
4.7.關(guān)閉服務(wù)和刪除進(jìn)程
先 ctrl+c
關(guān)閉服務(wù):net stop MongoDB
5.MongoDB基礎(chǔ)使用
5.1.常用的命令(重點(diǎn))
> Help 查看幫助
顯示數(shù)據(jù)庫列表 > show dbs
創(chuàng)建數(shù)據(jù)庫 > use dbname
如果數(shù)據(jù)庫不存在抗楔,則創(chuàng)建數(shù)據(jù)庫dbname棋凳,否則切換到指定數(shù)據(jù)庫dbname。創(chuàng)建的數(shù)據(jù)庫并不在數(shù)據(jù)庫的列表中连躏,要顯示它剩岳,我們需要向數(shù)據(jù)庫dbname插入一些數(shù)據(jù)
MongoDB 中默認(rèn)的數(shù)據(jù)庫為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫入热,集合將存放在 test 數(shù)據(jù)庫中拍棕。
顯示數(shù)據(jù)庫中的集合 show collections
5.1.1.增加數(shù)據(jù)(重點(diǎn)中的重點(diǎn))
db.web.save({"name":"老李"}) 創(chuàng)建了名為web的集合,并新增了一條{"name":"老李"} 的數(shù)據(jù)
db.web.insert({"name":"ghost", "age":10}) 在web集合中插入一條新數(shù)據(jù)勺良,如果沒有web這個(gè)集合绰播,mongodb會(huì)自動(dòng)創(chuàng)建
save()和insert()也存在著些許區(qū)別:若新增的數(shù)據(jù)主鍵已經(jīng)存在,insert()會(huì)不做操作并提示錯(cuò)誤尚困,而save() 則更改原來的內(nèi)容為新內(nèi)容蠢箩。
_id是主鍵,主鍵是每條數(shù)據(jù)的唯一標(biāo)識(shí),不能重復(fù)谬泌,就像身份證是每個(gè)人唯一的編號(hào)一樣滔韵。
存在數(shù)據(jù):{ _id : ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老李"} ,_id是主鍵
insert({ _id : ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王 " }) 會(huì)提示錯(cuò)誤
save(ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王 " }) 會(huì)把 “老李” 改為 “ 老王” 掌实,有update的作用陪蜻。
5.1.2.刪除數(shù)據(jù)(重點(diǎn)中的重點(diǎn))
1、刪除文檔
2贱鼻、刪除集合
3宴卖、刪除數(shù)據(jù)庫
- db.users.remove({}) 刪除users集合下所有數(shù)據(jù)
- db.users.remove({"name": "lecaf"}) 刪除users集合下name=”lecaf”的數(shù)據(jù)
- db.users.drop()或db.runCommand({"drop":"users"}) 刪除集合users
- db.runCommand({"dropDatabase": 1}) 刪除當(dāng)前數(shù)據(jù)庫,注意 此處的1沒加雙引號(hào)邻悬。
5.1.3.查找數(shù)據(jù)(重點(diǎn)中的重點(diǎn))
- db.users.find() 查找users集合中所有數(shù)據(jù)
- db.users.findOne() 查找users集合中的第一條數(shù)據(jù)
- db.users.find().pretty() 格式化查詢到的數(shù)據(jù)
5.1.4.修改數(shù)據(jù)(重點(diǎn)中的重點(diǎn))
6症昏、db.web.update({"name":"a1"}, {"age":10}) 修改name=a1的數(shù)據(jù)為sex=1,第一個(gè)參數(shù)是查找條件拘悦,第二個(gè)參數(shù)是修改內(nèi)容,主鍵不能修改橱脸,如圖
5.2.MongoDB高級(jí)命令(重點(diǎn))
5.2.1.條件查找
學(xué)習(xí)用命令的意義在于:我們做系統(tǒng)的時(shí)候础米,后端人員需要給前端開發(fā)人員提供數(shù)據(jù),如果后端人員用可視化工具添诉,只是他自己眼睛能看到屁桑,但是如果要把這些數(shù)據(jù)提供給前端,他需要用代碼去查數(shù)據(jù)庫栏赴,把查詢的結(jié)果返回給前端蘑斧。
為此:老師給大家整理了下以下這些常見的查詢例子,如果你以后忘記了须眷,就翻出來看看竖瘾。
提前做了一個(gè)歌手的json數(shù)據(jù),我們可以把他導(dǎo)入到數(shù)據(jù)庫,練習(xí)查找命令花颗。
語法1:db.collection.find({ "key" : value }) 查找key=value的數(shù)據(jù).
例1:查找女歌星捕传。
思路:查找sex=”女”的歌星。
具體命令:
語法2: db.collection.find({ "key" : { lt: value } }) key < value
例3:查詢年齡小于35歲的歌星扩劝。
語法4:db.collection.find({ "key" : { lte: value } }) key <= value
例5:查詢年齡在小于等于32歲的歌星庸论。
語法6:db.collection.find({ "key" : { lt: value2 } }) value1 < key <value2
例6:查找年齡在30-40歲之間的歌星。
語法7:db.collection.find({ "key" : { mod : [ 10 , 1 ] } }) 取模運(yùn)算棒呛,條件相當(dāng)于key % 10 == 1 即key除以10余數(shù)為1的
例8:查詢成績?yōu)? 聂示、15、25簇秒、鱼喉。。。蒲凶。95的歌星气筋。
語法9:db.collection.find({ "key" : { nin: [ 1, 2, 3 ] } }) 不屬于,條件相當(dāng)于key的值不屬于[ 1, 2, 3 ]中任何一個(gè)旋圆。
例10:查詢國籍不為美國和韓國的歌手宠默。
語法11:db.collection.find({ "key" : { size 數(shù)量、尺寸灵巧,條件相當(dāng)于key對(duì)應(yīng)的值的數(shù)量是1(值必須是數(shù)組)
這個(gè)有點(diǎn)難理解搀矫,通過例子理解容易些:
每個(gè)歌星都有代表作,并且代表作是數(shù)組刻肄。
例11:查詢有3個(gè)代表作品的歌手瓤球。
語法12:db.collection.find({ "key" : { exists 字段存在,true返回存在字段key的數(shù)據(jù)敏弃,false返回不存在字段key的數(shù)據(jù)
例12-1:查詢包含tel字段的數(shù)據(jù)卦羡。
之前的數(shù)據(jù)字段都是一樣的,此時(shí)插入一條數(shù)據(jù){"name":"test","tel":"15388889999"}
然后查詢:
例12-2 :查詢不包含tel字段的數(shù)據(jù)
語法13:db.collection.find({ or語法表示或的意思麦到。 (注意:MongoDB 1.5.3后版本可用)绿饵,符合條件a=1的或者符合條件b=2的數(shù)據(jù)都會(huì)查詢出來。
例13:某個(gè)娛樂公司15個(gè)人瓶颠,資料都在數(shù)據(jù)庫里面拟赊,某個(gè)活動(dòng)必須要?jiǎng)⒌氯A參加,另外需要團(tuán)隊(duì)的全部女歌手配合演出粹淋,領(lǐng)導(dǎo)安排你幫忙打印歌手的資料吸祟。
db.collection.find({ "key.subkey" :value }) 內(nèi)嵌對(duì)象中的值匹配,注意:"key.subkey"必須加引號(hào)桃移。
例14:插入一條測試數(shù)據(jù)
db.singer.insert({"name":"test2",”score”:{"yy":80,"sx":79,"wy":95}})
此數(shù)據(jù)的score對(duì)應(yīng)的值是一個(gè)對(duì)象屋匕。
例14:查詢語文成績?yōu)?0的同學(xué)。
5.2.2.排序
db.collection.find().sort({ "key1" : -1 ,"key2" : 1 }) 這里的1代表升序借杰,-1代表降序
例1:對(duì)所有歌星安年齡排序炒瘟。
例2:對(duì)所有歌星先按年齡降序排列,再按score字段降序排列第步。
5.2.3.索引
索引通常能夠極大的提高查詢的效率疮装,如果沒有索引,MongoDB在讀取數(shù)據(jù)時(shí)必須掃描集合中的每個(gè)文件并選取那些符合查詢條件的記錄粘都。
這種掃描全集合的查詢效率是非常低的廓推,特別在處理大量的數(shù)據(jù)時(shí),查詢可以要花費(fèi)幾十秒甚至幾分鐘翩隧,這對(duì)網(wǎng)站的性能是非常致命的樊展。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲(chǔ)在一個(gè)易于遍歷讀取的數(shù)據(jù)集合中,索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)
例如:我們查詢張三的時(shí)候 db.singer.find({"name":"張三"})
如果沒有對(duì)name 字段建立索引专缠,數(shù)據(jù)庫在查詢的時(shí)候會(huì)掃描所有的數(shù)據(jù)雷酪,如果數(shù)據(jù)量小的時(shí)候,感覺不出來速度慢涝婉,當(dāng)數(shù)據(jù)越來越多的時(shí)候哥力,就會(huì)越來越慢。
這個(gè)時(shí)候如果給name 建立一個(gè)索引墩弯,查詢速度就會(huì)加快吩跋。
MongoDB使用 ensureIndex() 方法來創(chuàng)建索引。
ensureIndex()方法基本語法格式如下所示:
db.COLLECTION_NAME.ensureIndex({KEY:1})
對(duì)name 字段建立一個(gè)索引如下:
可視化工具里面可以看到剛創(chuàng)建的索引:
語法中 Key 值為你要?jiǎng)?chuàng)建的索引字段渔工,1為指定按升序創(chuàng)建索引锌钮,如果你想按降序來創(chuàng)建索引指定為-1即可。
實(shí)例
db.col.ensureIndex({"title":1})>
ensureIndex() 方法中你也可以設(shè)置使用多個(gè)字段創(chuàng)建索引(關(guān)系型數(shù)據(jù)庫中稱作復(fù)合索引)引矩。
db.col.ensureIndex({"title":1,"description":-1})
5.2.4.其他
db.collection.find().limit(5) 控制返回結(jié)果數(shù)量梁丘,如果參數(shù)是0,則沒有約束旺韭,limit()將不起作用
db.collection.find().skip(5) 控制返回結(jié)果跳過多少數(shù)量氛谜,如果參數(shù)是0,則當(dāng)作沒有約束茂翔,skip()將不起作用混蔼,或者說跳過了0條
db.collection.find().skip(5).limit(5) 可用來做分頁履腋,跳過5條數(shù)據(jù)再取5條數(shù)據(jù)
db.collection.find().count() count()返回結(jié)果集的條數(shù)
db.collection.find().skip(5).limit(5).count(true) 在加入skip()和limit()這兩個(gè)操作時(shí)珊燎,要獲得實(shí)際返回的結(jié)果數(shù),需要一個(gè)參數(shù)true遵湖,否則返回的是符合查詢條件的結(jié)果總數(shù)
模糊查詢:
db.collection.find({"name":/ab/})
//newsModel.find({"title":/ab/})
//newsModel.find({"title":new RegExp(變量關(guān)鍵詞))
以上是常見的查詢,如果工作中遇到更加復(fù)雜的需求悔政,可以通過查文檔來解決。
5.3.使用可視化工具
5.3.1.插入
1)右鍵點(diǎn)擊集合名-左鍵點(diǎn)擊InsertDocument
2)在彈出的對(duì)話框里輸入Json格式的數(shù)據(jù)延旧,點(diǎn)擊Insert完成插入谋国。
5.3.2.查詢
1)選中要查詢的集合,點(diǎn)擊find迁沫;
或點(diǎn)擊工具欄中的find芦瘾;
2)查詢界面包括四個(gè)區(qū)域
5.3.3.刪除
選中要操作的集合,點(diǎn)擊Remove進(jìn)入刪除面板集畅,輸入要?jiǎng)h除數(shù)據(jù)的查詢條件近弟,點(diǎn)擊Remove,在彈出的提示框中確認(rèn)刪除即可挺智。
5.3.4.修改
選中要操作的集合祷愉,點(diǎn)擊Update進(jìn)入修改面板;
左側(cè)輸入查詢條件,右側(cè)輸入要更新的字段名稱和值二鳄;
格式如:{$set:{"score":100}}
6. 課程總結(jié)
6.1. 重點(diǎn)
安裝mongodb
mongodb的常用命令(增刪改查)
mongodb的高級(jí)命令
6.2. 難點(diǎn)
- mongodb高級(jí)命令
6.3. 如何掌握赴涵?
此技能通過使用升級(jí)。
將常見的用法截圖保存到文件夾中订讼,時(shí)乘璐埽回顧。
6.4. 排錯(cuò)技巧(技巧)
- 將命令寫入命令行執(zhí)行躯嫉,觀察結(jié)果反饋的錯(cuò)誤信息
7. 作業(yè)
作業(yè)難度:☆☆☆
什么是NoSQL纱烘? 與關(guān)系型數(shù)據(jù)庫的區(qū)別是什么?
新建一個(gè)數(shù)據(jù)庫test100祈餐,向集合webs插入10條數(shù)據(jù)擂啥,每條數(shù)據(jù)必須包含字段age,按age倒序排列帆阳,查詢出第5-8條數(shù)據(jù)哺壶。 skip(4).limit(4)
將每一步操作的命令和結(jié)果截圖到word里面。
- 新建一個(gè)歌手資料數(shù)據(jù)庫test101蜒谤,集合singer山宾,至少包括:姓名、性別鳍徽、年齡资锰、代表字段,可以有更多字段阶祭。使用mongoose對(duì)此集合做一個(gè)增刪改查的操作绷杜。
將每一步操作的命令和結(jié)果截圖到word里面。
8. 面試題
常用的數(shù)據(jù)庫有哪些濒募?
NOSQL和關(guān)系型數(shù)據(jù)庫的區(qū)別
擴(kuò)展知識(shí)****或課外閱讀推薦****(可選****)
9.1. 擴(kuò)展知識(shí)
了解 mysql數(shù)據(jù)庫的安裝與使用
9.2. 課外閱讀
常用的Mongodb命令:<u>http://www.jb51.net/article/48217.htm</u>