一、Mongodb數(shù)據(jù)庫(kù) Day01
1.課程介紹
- 數(shù)據(jù)庫(kù)概述(了解)
- NoSQL和MongoDB簡(jiǎn)介(了解)
- MongoDB安裝(掌握)
- MongoDB基本操作(掌握)
2.數(shù)據(jù)庫(kù)概述
2.1.引言

以上圖片是什么?
答案:車庫(kù)
車庫(kù)用來做什么?
答案:停放車輛,換句話說:存儲(chǔ)汽車。
數(shù)據(jù)庫(kù)用來做什么?
答案:存儲(chǔ)數(shù)據(jù)。
思考1:老師讓你匯總下本周遲到人數(shù),你如何記錄?
數(shù)據(jù)量比較小,用一個(gè)excel表格就存放遲到人的名單。
思考2:2016年四川高考成績(jī)?nèi)绾未鎯?chǔ)?
數(shù)據(jù)量大了,顯然excel不能滿足,就需要存儲(chǔ)在數(shù)據(jù)庫(kù)里面。
不僅如此,很多企業(yè)都有自己的數(shù)據(jù)需要管理,都需要使用數(shù)據(jù)庫(kù)。
2.2.什么是數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),它產(chǎn)生于距今六十多年前,隨著信息技術(shù)和市場(chǎng)的發(fā)展,特別是二十世紀(jì)九十年代以后,數(shù)據(jù)庫(kù)技術(shù)得到了更加快速的發(fā)展,應(yīng)用得更加廣泛。主要用它進(jìn)行管理各種系統(tǒng)的數(shù)據(jù),作為科學(xué)研究和決策的重要技術(shù)手段。
常見的數(shù)據(jù)庫(kù)有哪些:
下圖是2015年數(shù)據(jù)庫(kù)排行

關(guān)系型數(shù)據(jù)庫(kù):Access mySql SqlServer oracle db2等。
非關(guān)系型數(shù)據(jù)庫(kù): 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ù)庫(kù)。
數(shù)據(jù)庫(kù)是一門學(xué)科,專門做數(shù)據(jù)庫(kù)運(yùn)維的人叫Database Administrator,簡(jiǎn)稱DBA,有的DBA指深入專研一種數(shù)據(jù)庫(kù)。
思考:在這兩天的學(xué)習(xí)過程中,對(duì)于我們web前端學(xué)科的同學(xué)來說,我們?nèi)绾稳W(xué)它,掌握到什么程度?
我們對(duì)大家的要求:
4、了解數(shù)據(jù)庫(kù)發(fā)展歷史。(面試用)
5、會(huì)安裝MongoDB和配置環(huán)境變量。
6、學(xué)會(huì)常用的命令。
7、學(xué)會(huì)用后端語言進(jìn)行MongoDB的CRUD操作。
2.3.NoSQL簡(jiǎn)介
NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。NoSQL有時(shí)也稱作Not Only SQL的縮寫,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。
2.4MongoDB簡(jiǎn)介
MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 是非關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系型數(shù)據(jù)庫(kù)的。
隨著大數(shù)據(jù)的不斷發(fā)展,非關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)變得越來越重要,相關(guān)的產(chǎn)品也都得到了飛速發(fā)展。而其中MongoDB更是佼佼者,作為高性能開源文檔數(shù)據(jù)庫(kù),MongoDB以敏捷、可擴(kuò)展和對(duì)企業(yè)應(yīng)用友好而著稱,因其操作簡(jiǎn)單、完全免費(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ù)庫(kù)是后端人員做的事情,但是做為高級(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ǔ)格式,簡(jiǎn)稱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ù)庫(kù)里面的全部都是bson格式的數(shù)據(jù)。
2.7非關(guān)系型數(shù)據(jù)庫(kù)與關(guān)系型數(shù)據(jù)庫(kù)區(qū)別
非關(guān)系型數(shù)據(jù)庫(kù)的優(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ù)庫(kù)的優(yōu)勢(shì):
1. 復(fù)雜查詢
可以用SQL語句方便的在多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢。
2. 事務(wù)支持
使得對(duì)于安全性能很高的數(shù)據(jù)訪問要求得以實(shí)現(xiàn)。
總結(jié):
? 數(shù)據(jù)庫(kù)功能是用來存儲(chǔ)數(shù)據(jù)的。
? 數(shù)據(jù)庫(kù)分為關(guān)系系數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)(nosql)
? 關(guān)系型數(shù)據(jù)庫(kù)是由表和表之間的關(guān)系組成的,nosql是由集合組成的,集合下面是很多的文檔。
? 非關(guān)系型數(shù)據(jù)庫(kù)文件存儲(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ù)庫(kù)最大為 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ù)庫(kù)的操作是通過執(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)配置”。
在接下來的頁(yè)面中點(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ù)庫(kù)服務(wù)器可以建立很多個(gè)數(shù)據(jù)庫(kù),我們打算把新建的數(shù)據(jù)庫(kù)放哪里呢?需要指定一個(gè)位置。
1.在d盤建立一個(gè)文件夾mongodb,并且建立子目錄db和log.
2.在log目錄下建立一個(gè)文件MongoDB.log ,后綴為.log.
d:\mongodb\db、d:\mongodb\log, 分別用來存放數(shù)據(jù)庫(kù)文件和數(shù)據(jù)庫(kù)日志文件.
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í)行后,就掛起了,需要另外開命令窗口測(cè)試是否啟動(dòng)成功。
4.5.測(cè)試連接
原來的cmd窗口不關(guān)閉,以管理員身份再開一個(gè)cmd窗口,輸入mongo或者mongo.exe,出現(xiàn)如下信息說明測(cè)試通過,此時(shí)我們已經(jīng)進(jìn)入了test這個(gè)數(shù)據(jù)庫(kù)。

從上圖可以看出,我們進(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ù)庫(kù)了,因此每次想使用mongodb數(shù)據(jù)庫(kù)都要開啟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)。
再次測(cè)試連接
> 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ù)庫(kù)列表 > show dbs
創(chuàng)建數(shù)據(jù)庫(kù) > use dbname
如果數(shù)據(jù)庫(kù)不存在,則創(chuàng)建數(shù)據(jù)庫(kù)dbname,否則切換到指定數(shù)據(jù)庫(kù)dbname。創(chuàng)建的數(shù)據(jù)庫(kù)并不在數(shù)據(jù)庫(kù)的列表中,要顯示它,我們需要向數(shù)據(jù)庫(kù)dbname插入一些數(shù)據(jù)
MongoDB 中默認(rèn)的數(shù)據(jù)庫(kù)為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫(kù),集合將存放在 test 數(shù)據(jù)庫(kù)中。
顯示數(shù)據(jù)庫(kù)中的集合 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ù)庫(kù)
- 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ù)庫(kù),注意 此處的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ù)庫(kù),把查詢的結(jié)果返回給前端。
為此:老師給大家整理了下以下這些常見的查詢例子,如果你以后忘記了,就翻出來看看。
提前做了一個(gè)歌手的json數(shù)據(jù),我們可以把他導(dǎo)入到數(shù)據(jù)庫(kù),練習(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:查詢成績(jī)?yōu)? 、15、25、。。。。95的歌星。

語法9:db.collection.find({ "key" : { nin: [ 1, 2, 3 ] } }) 不屬于,條件相當(dāng)于key的值不屬于[ 1, 2, 3 ]中任何一個(gè)。
例10:查詢國(guó)籍不為美國(guó)和韓國(guó)的歌手。

語法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ù)庫(kù)里面,某個(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:插入一條測(cè)試數(shù)據(jù)
db.singer.insert({"name":"test2",”score”:{"yy":80,"sx":79,"wy":95}})
此數(shù)據(jù)的score對(duì)應(yīng)的值是一個(gè)對(duì)象。
例14:查詢語文成績(jī)?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ù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)

例如:我們查詢張三的時(shí)候 db.singer.find({"name":"張三"})
如果沒有對(duì)name 字段建立索引,數(shù)據(jù)庫(kù)在查詢的時(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ù)庫(kù)中稱作復(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) 可用來做分頁(yè),跳過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í)?;仡櫋?/p>
6.4. 排錯(cuò)技巧(技巧)
- 將命令寫入命令行執(zhí)行,觀察結(jié)果反饋的錯(cuò)誤信息
7. 作業(yè)
作業(yè)難度:☆☆☆
什么是NoSQL? 與關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別是什么?
新建一個(gè)數(shù)據(jù)庫(kù)test100,向集合webs插入10條數(shù)據(jù),每條數(shù)據(jù)必須包含字段age,按age倒序排列,查詢出第5-8條數(shù)據(jù)。 skip(4).limit(4)
將每一步操作的命令和結(jié)果截圖到word里面。
- 新建一個(gè)歌手資料數(shù)據(jù)庫(kù)test101,集合singer,至少包括:姓名、性別、年齡、代表字段,可以有更多字段。使用mongoose對(duì)此集合做一個(gè)增刪改查的操作。
將每一步操作的命令和結(jié)果截圖到word里面。
8. 面試題
常用的數(shù)據(jù)庫(kù)有哪些?
NOSQL和關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別
擴(kuò)展知識(shí)****或課外閱讀推薦****(可選****)
9.1. 擴(kuò)展知識(shí)
了解 mysql數(shù)據(jù)庫(kù)的安裝與使用
9.2. 課外閱讀
常用的Mongodb命令:<u>http://www.jb51.net/article/48217.htm</u>