node.js—Mongodb數(shù)據(jù)庫(kù) day1(2019.6.8)

一、Mongodb數(shù)據(jù)庫(kù) Day01

1.課程介紹

  • 數(shù)據(jù)庫(kù)概述(了解)
  • NoSQL和MongoDB簡(jiǎn)介(了解)
  • MongoDB安裝(掌握)
  • MongoDB基本操作(掌握)

2.數(shù)據(jù)庫(kù)概述

2.1.引言

image.png

以上圖片是什么?
答案:車庫(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ù)排行


image.png

關(guān)系型數(shù)據(jù)庫(kù):Access mySql SqlServer oracle db2等。
非關(guān)系型數(shù)據(jù)庫(kù): MongoDB,Redis,HBase,CouchDB等。


image.png
image.png

文檔型數(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)行下載:


image.png

2.根據(jù)你的系統(tǒng)下載 32 位或 64 位的 .msi 文件,下載后雙擊該文件,按操作提示安裝即可。


image.png

3.勾選同意協(xié)議:


image.png

4.選擇完整安裝:

你可以通過點(diǎn)擊 "Custom(自定義)" 按鈕來設(shè)置你的安裝目錄
安裝過程如下:


image.png
image.png
image.png
image.png

5.看到上面的界面表示已經(jīng)安裝完成。

安裝完成后效果:


image.png

3.2.MongoVUE安裝

MongoVUE可以提高你使用MongoDB的幸福指數(shù),他是MongoDB的可視化界面管理工具。
雙擊Installer.msi 安裝,默認(rèn)安裝在C:\Program Files (x86)\MongoVUE


image.png

第二步:使用破解版的MongoVUE.exe覆蓋安裝目錄下的MongoVUE.exe。


image.png

4.MongoDB的安裝(重點(diǎn))

4.1.基本操作

對(duì)mongodb數(shù)據(jù)庫(kù)的操作是通過執(zhí)行命令來完成的,我的電腦里面這些命令安裝在:
C:\Program Files\MongoDB\Server\3.2\bin


image.png

要執(zhí)行這些命令,需要以管理員身份運(yùn)行cmd。
打開開始菜單,找到命令提示符,在上面點(diǎn)擊右鍵,選擇以管理員身份運(yùn)行。


image.png

要想執(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)境變量

image.png

image.png

image.png

Win7下設(shè)置環(huán)境變量:
第一步:我的電腦上點(diǎn)擊右鍵,選擇屬性


image.png

第二步:找到并打開“高級(jí)系統(tǒng)配置”。
在接下來的頁(yè)面中點(diǎn)擊“高級(jí)系統(tǒng)配置”,打開“系統(tǒng)屬性”窗口。


image.png

第三步:找到“環(huán)境變量”按鈕并點(diǎn)擊。
image.png

第四部:在環(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)境變量。
image.png

image.png

在變量值最后加上分號(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文件夾的只讀屬性去掉。


image.png

4.4.啟動(dòng)MongoDB

image.png

以管理員身份運(yùn)行cmd.exe,進(jìn)入dos命令界面,執(zhí)行下列命令

mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log"

image.png

image.png

執(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ù)。


image.png

從上圖可以看出,我們進(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


image.png
打開任務(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           查看幫助

image.png

顯示數(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ò)誤


image.png

save(ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王 " }) 會(huì)把 “老李” 改為 “ 老王” ,有update的作用。


image.png
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)容,主鍵不能修改,如圖


image.png

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í)查找命令。

image.png

語法1:db.collection.find({ "key" : value }) 查找key=value的數(shù)據(jù).
例1:查找女歌星。
思路:查找sex=”女”的歌星。
具體命令:
image.png

語法2: db.collection.find({ "key" : { lt: value } }) key < value
例3:查詢年齡小于35歲的歌星。
image.png

語法4:db.collection.find({ "key" : { lte: value } }) key <= value
例5:查詢年齡在小于等于32歲的歌星。
image.png

語法6:db.collection.find({ "key" : { lt: value2 } }) value1 < key <value2
例6:查找年齡在30-40歲之間的歌星。
image.png

語法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的歌星。
image.png

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

語法11:db.collection.find({ "key" : { size 數(shù)量、尺寸,條件相當(dāng)于key對(duì)應(yīng)的值的數(shù)量是1(值必須是數(shù)組)
這個(gè)有點(diǎn)難理解,通過例子理解容易些:
每個(gè)歌星都有代表作,并且代表作是數(shù)組。
例11:查詢有3個(gè)代表作品的歌手。
image.png

語法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"}
然后查詢:
image.png

例12-2 :查詢不包含tel字段的數(shù)據(jù)

image.png

語法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)安排你幫忙打印歌手的資料。

image.png

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é)。


image.png
5.2.2.排序

db.collection.find().sort({ "key1" : -1 ,"key2" : 1 }) 這里的1代表升序,-1代表降序
例1:對(duì)所有歌星安年齡排序。


image.png

例2:對(duì)所有歌星先按年齡降序排列,再按score字段降序排列。

5.2.3.索引
image.png

索引通常能夠極大的提高查詢的效率,如果沒有索引,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)


image.png

例如:我們查詢張三的時(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è)索引如下:

image.png

可視化工具里面可以看到剛創(chuàng)建的索引:

image.png

語法中 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()將不起作用


image.png

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
image.png
2)在彈出的對(duì)話框里輸入Json格式的數(shù)據(jù),點(diǎn)擊Insert完成插入。
image.png
5.3.2.查詢
1)選中要查詢的集合,點(diǎn)擊find;
image.png

或點(diǎn)擊工具欄中的find;


image.png
2)查詢界面包括四個(gè)區(qū)域
image.png
image.png
5.3.3.刪除

選中要操作的集合,點(diǎn)擊Remove進(jìn)入刪除面板,輸入要?jiǎng)h除數(shù)據(jù)的查詢條件,點(diǎn)擊Remove,在彈出的提示框中確認(rèn)刪除即可。

image.png
image.png
5.3.4.修改

選中要操作的集合,點(diǎn)擊Update進(jìn)入修改面板;


image.png

左側(cè)輸入查詢條件,右側(cè)輸入要更新的字段名稱和值;
格式如:{$set:{"score":100}}

image.png

6. 課程總結(jié)

6.1. 重點(diǎn)

  1. 安裝mongodb

  2. mongodb的常用命令(增刪改查)

  3. mongodb的高級(jí)命令

6.2. 難點(diǎn)

  1. mongodb高級(jí)命令

6.3. 如何掌握?

  1. 此技能通過使用升級(jí)。

  2. 將常見的用法截圖保存到文件夾中,時(shí)?;仡櫋?/p>

6.4. 排錯(cuò)技巧(技巧)

  1. 將命令寫入命令行執(zhí)行,觀察結(jié)果反饋的錯(cuò)誤信息

7. 作業(yè)

作業(yè)難度:☆☆☆

  1. 什么是NoSQL? 與關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別是什么?

  2. 新建一個(gè)數(shù)據(jù)庫(kù)test100,向集合webs插入10條數(shù)據(jù),每條數(shù)據(jù)必須包含字段age,按age倒序排列,查詢出第5-8條數(shù)據(jù)。 skip(4).limit(4)

將每一步操作的命令和結(jié)果截圖到word里面。

  1. 新建一個(gè)歌手資料數(shù)據(jù)庫(kù)test101,集合singer,至少包括:姓名、性別、年齡、代表字段,可以有更多字段。使用mongoose對(duì)此集合做一個(gè)增刪改查的操作。

將每一步操作的命令和結(jié)果截圖到word里面。

8. 面試題

  1. 常用的數(shù)據(jù)庫(kù)有哪些?

  2. NOSQL和關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別

  3. 擴(kuò)展知識(shí)****或課外閱讀推薦****(可選****)

9.1. 擴(kuò)展知識(shí)

了解 mysql數(shù)據(jù)庫(kù)的安裝與使用

9.2. 課外閱讀

常用的Mongodb命令:<u>http://www.jb51.net/article/48217.htm</u>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容