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

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

1.課程介紹

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

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

2.1.引言

image.png

以上圖片是什么锐涯?
答案:車庫

車庫用來做什么犬辰?
答案:停放車輛嗦篱,換句話說:存儲(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ù)庫排行


image.png

關(guān)系型數(shù)據(jù)庫:Access mySql SqlServer oracle db2等辽装。
非關(guān)系型數(shù)據(jù)庫: 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ù)庫。

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


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ù)庫的操作是通過執(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)配置”。
在接下來的頁面中點(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ù)庫服務(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文件夾的只讀屬性去掉。


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í)行后,就掛起了寒随,需要另外開命令窗口測試是否啟動(dòng)成功糠悯。

4.5.測試連接

原來的cmd窗口不關(guān)閉,以管理員身份再開一個(gè)cmd窗口妻往,輸入mongo或者mongo.exe互艾,出現(xiàn)如下信息說明測試通過,此時(shí)我們已經(jīng)進(jìn)入了test這個(gè)數(shù)據(jù)庫讯泣。


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ù)庫了昨稼,因此每次想使用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


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

image.png

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


image.png

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


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


image.png

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

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:查詢成績?yōu)? 聂示、15、25簇秒、鱼喉。。。蒲凶。95的歌星气筋。
image.png

語法9:db.collection.find({ "key" : { nin: [ 1, 2, 3 ] } }) 不屬于,條件相當(dāng)于key的值不屬于[ 1, 2, 3 ]中任何一個(gè)旋圆。
例10:查詢國籍不為美國和韓國的歌手宠默。
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ù)庫里面拟赊,某個(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:插入一條測試數(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é)。


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ù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)


image.png

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

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ù)庫中稱作復(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) 可用來做分頁履腋,跳過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í)乘璐埽回顧。

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

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

7. 作業(yè)

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

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

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

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

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

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

8. 面試題

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

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

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

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

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

9.2. 課外閱讀

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鞭盟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瑰剃,更是在濱河造成了極大的恐慌齿诉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌姚,死亡現(xiàn)場離奇詭異粤剧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挥唠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抵恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猛遍,你說我怎么就攤上這事馋记『牌拢” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵梯醒,是天一觀的道長宽堆。 經(jīng)常有香客問我,道長茸习,這世上最難降的妖魔是什么畜隶? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮号胚,結(jié)果婚禮上籽慢,老公的妹妹穿的比我還像新娘。我一直安慰自己猫胁,他們只是感情好箱亿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弃秆,像睡著了一般届惋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菠赚,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天脑豹,我揣著相機(jī)與錄音,去河邊找鬼衡查。 笑死瘩欺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拌牲。 我是一名探鬼主播俱饿,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼们拙!你這毒婦竟也來了稍途?” 一聲冷哼從身側(cè)響起阁吝,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤砚婆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后突勇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體装盯,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年甲馋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埂奈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡定躏,死狀恐怖账磺,靈堂內(nèi)的尸體忽然破棺而出芹敌,到底是詐尸還是另有隱情,我是刑警寧澤垮抗,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布氏捞,位于F島的核電站,受9級(jí)特大地震影響冒版,放射性物質(zhì)發(fā)生泄漏液茎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一辞嗡、第九天 我趴在偏房一處隱蔽的房頂上張望捆等。 院中可真熱鬧,春花似錦续室、人聲如沸栋烤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽班缎。三九已至,卻和暖如春她渴,著一層夾襖步出監(jiān)牢的瞬間达址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工趁耗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诲锹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓仁连,卻偏偏與公主長得像镰矿,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罢屈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容