Mongodb數(shù)據(jù)庫
[if !supportLists]1.?[endif]課程介紹
[if !supportLists]??[endif]數(shù)據(jù)庫概述(了解)
[if !supportLists]??[endif]NoSQL和MongoDB簡介(了解)
[if !supportLists]??[endif]MongoDB安裝(掌握)
[if !supportLists]??[endif]MongoDB基本操作(掌握)
[if !supportLists]2.?[endif]數(shù)據(jù)庫概述
[if !supportLists]2.1.?[endif]引言
以上圖片是什么?
答案:車庫
車庫用來做什么?
答案:停放車輛,換句話說:存儲汽車。
數(shù)據(jù)庫用來做什么?
答案:存儲數(shù)據(jù)。
思考1:老師讓你匯總下本周遲到人數(shù),你如何記錄?
數(shù)據(jù)量比較小,用一個excel表格就存放遲到人的名單。
思考2:2016年四川高考成績?nèi)绾未鎯Γ?/p>
數(shù)據(jù)量大了,顯然excel不能滿足,就需要存儲在數(shù)據(jù)庫里面。
不僅如此,很多企業(yè)都有自己的數(shù)據(jù)需要管理,都需要使用數(shù)據(jù)庫。
[if !supportLists]2.2.?[endif]什么是數(shù)據(jù)庫
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(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ù)這個名字中,“文檔”兩個字很容易誤解。其實這個文檔就是bson 。bson 是 json 的超集,比如 json 中沒法儲存二進(jìn)制類型,而 bson 拓展了類型,提供了二進(jìn)制支持。mongodb 中存儲的一條條記錄都可以用 bson 來表示。所以你也可以認(rèn)為,mongodb 是個存 bson 數(shù)據(jù)的數(shù)據(jù)庫。
數(shù)據(jù)庫是一門學(xué)科,專門做數(shù)據(jù)庫運維的人叫Database Administrator,簡稱DBA,有的DBA指深入專研一種數(shù)據(jù)庫。
思考:在這兩天的學(xué)習(xí)過程中,對于我們web前端學(xué)科的同學(xué)來說,我們?nèi)绾稳W(xué)它,掌握到什么程度?
我們對大家的要求:
[if !supportLists]??[endif]了解數(shù)據(jù)庫發(fā)展歷史。(面試用)
[if !supportLists]??[endif]會安裝MongoDB和配置環(huán)境變量。
[if !supportLists]??[endif]學(xué)會常用的命令。
[if !supportLists]??[endif]學(xué)會用后端語言進(jìn)行MongoDB的CRUD操作。
[if !supportLists]2.3.?[endif]NoSQL簡介
NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。
[if !supportLists]2.4.?[endif]MongoDB簡介
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為 WEB 應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
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以敏捷、可擴展和對企業(yè)應(yīng)用友好而著稱,因其操作簡單、完全免費、源碼公開等特點,受到了IT從業(yè)人員的青睞,并被廣泛部署于實際的生產(chǎn)環(huán)境中。
使用MongoDB的公司包括:BAT、360、Foursquare、Craiglist,、迪士尼、SAP、Intuit、EA等。
很多大公司在用,并且越來越多的公司也要用,我們以后就可能接觸到相關(guān)的項目,雖然數(shù)據(jù)庫是后端人員做的事情,但是做為高級前端,有必要對它有所了解,才更好的和后端開發(fā)人員合作,做到知己知彼,百戰(zhàn)不殆。
[if !supportLists]2.5.?[endif]MongoDB優(yōu)點
它的特點是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。主要功能特性有:
[if !supportLists]·?[endif]面向集合存儲,易存儲對象類型的數(shù)據(jù)。
[if !supportLists]·?[endif]模式自由。
[if !supportLists]·?[endif]支持動態(tài)查詢。
[if !supportLists]·?[endif]支持完全索引,包含內(nèi)部對象。
[if !supportLists]·?[endif]支持查詢。
[if !supportLists]·?[endif]支持復(fù)制和故障恢復(fù)。
[if !supportLists]·?[endif]使用高效的二進(jìn)制數(shù)據(jù)存儲,包括大型對象(如視頻等)。
[if !supportLists]·?[endif]自動處理碎片,以支持云計算層次的擴展性
[if !supportLists]·?[endif]支持RUBY,PYTHON,JAVA,C++,PHP等多種語言。
[if !supportLists]·?[endif]文件存儲格式為BSON(一種JSON的擴展)
[if !supportLists]2.6.?[endif]BSON
BSON是一種類似json的二進(jìn)制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象,但是BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型。
????BSON可以做為網(wǎng)絡(luò)數(shù)據(jù)交換的一種存儲形式,這個有點類似于Google的Protocol Buffer,但是BSON是一種schema-less的存儲形式,它的優(yōu)點是靈活性高,但它的缺點是空間利用率不是很理想。
BSON有三個特點:輕量性、可遍歷性、高效性。
后面大家會看到我們存在數(shù)據(jù)庫里面的全部都是bson格式的數(shù)據(jù)。
[if !supportLists]2.7.?[endif]非關(guān)系型數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫區(qū)別
非關(guān)系型數(shù)據(jù)庫的優(yōu)勢:
1.性能
NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應(yīng)關(guān)系,而且不需要經(jīng)過SQL層的解析,所以性能非常高。
2.可擴展性
同樣也是因為基于鍵值對,數(shù)據(jù)之間沒有耦合性,所以非常容易水平擴展。
關(guān)系型數(shù)據(jù)庫的優(yōu)勢:
1.復(fù)雜查詢
可以用SQL語句方便的在多個表之間做非常復(fù)雜的數(shù)據(jù)查詢。
2.事務(wù)支持
使得對于安全性能很高的數(shù)據(jù)訪問要求得以實現(xiàn)。
總結(jié):
[if !supportLists]??[endif]數(shù)據(jù)庫功能是用來存儲數(shù)據(jù)的。
[if !supportLists]??[endif]數(shù)據(jù)庫分為關(guān)系系數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫(nosql)
[if !supportLists]??[endif]關(guān)系型數(shù)據(jù)庫是由表和表之間的關(guān)系組成的,nosql是由集合組成的,集合下面是很多的文檔。
[if !supportLists]??[endif]非關(guān)系型數(shù)據(jù)庫文件存儲格式為BSON(一種JSON的擴展)。
[if !supportLists]3.?[endif]準(zhǔn)備工作
[if !supportLists]3.1.?[endif]MongoDB下載與安裝
MongoDB官網(wǎng)地址:
MongoDB下載地址:
https://www.mongodb.com/download-center#community
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。
選擇適合自己系統(tǒng)的版本進(jìn)行下載:
根據(jù)你的系統(tǒng)下載32位或 64 位的 .msi 文件,下載后雙擊該文件,按操作提示安裝即可。
安裝過程如下:
勾選同意協(xié)議:
選擇完整安裝:
你可以通過點擊"Custom(自定義)" 按鈕來設(shè)置你的安裝目錄
點擊install:
看到上面的界面表示已經(jīng)安裝完成。
安裝完成后效果:
[if !supportLists]3.2.?[endif]MongoVUE安裝
MongoVUE可以提高你使用MongoDB的幸福指數(shù),他是MongoDB的可視化界面管理工具。
雙擊Installer.msi安裝,默認(rèn)安裝在C:\Program Files (x86)\MongoVUE
第二步:使用破解版的MongoVUE.exe覆蓋安裝目錄下的MongoVUE.exe。
[if !supportLists]4.?[endif]MongoDB的安裝(重點)
[if !supportLists]4.1.?[endif]基本操作
對mongodb數(shù)據(jù)庫的操作是通過執(zhí)行命令來完成的,我的電腦里面這些命令安裝在:
C:\Program Files\MongoDB\Server\3.2\bin
要執(zhí)行這些命令,需要以管理員身份運行cmd。
打開開始菜單,找到命令提示符,在上面點擊右鍵,選擇以管理員身份運行。
要想執(zhí)行mongodb的命令,需要cd到他的安裝目錄下面的bin文件夾下。
為了在dos窗口的任何目錄下都能執(zhí)行mongo的命令,需要先設(shè)置環(huán)境變量,因為計算機在執(zhí)行命令的時候會在環(huán)境變量中找對應(yīng)的命令。
不同的操作系統(tǒng)設(shè)置環(huán)境變量的步驟大同小異。
Win10操作系統(tǒng)下設(shè)置環(huán)境變量如下圖。
[if !supportLists]4.2.?[endif]設(shè)置環(huán)境變量
Win7下設(shè)置環(huán)境變量:
第一步:我的電腦上點擊右鍵,選擇屬性
第二步:找到并打開“高級系統(tǒng)配置”。
在接下來的頁面中點擊“高級系統(tǒng)配置”,打開“系統(tǒng)屬性”窗口。
第三步:找到“環(huán)境變量”按鈕并點擊。?
第四部:在環(huán)境變量窗口中一般有兩個變量,一個是你當(dāng)前所使用的用戶獨有的環(huán)境變量,另一個是所有用戶都可以訪問的系統(tǒng)變量。其實如果在你的電腦上你只使用一個用戶的話,那么不管你修改的用戶的環(huán)境變量還是系統(tǒng)變量,效果都是一樣的。為了以防未來會新建其他用戶,那么我建議你修改系統(tǒng)變量而不是某個用戶獨有的環(huán)境變量。
在變量值最后加上分號;C:\Program Files\MongoDB\Server\3.2\bin
然后保存。
[if !supportLists]4.3.?[endif]創(chuàng)建文件夾
我們之前安裝的其實是數(shù)據(jù)服務(wù)器,通過數(shù)據(jù)庫服務(wù)器可以建立很多個數(shù)據(jù)庫,我們打算把新建的數(shù)據(jù)庫放哪里呢?需要指定一個位置。
[if !supportLists]1、[endif]在d盤建立一個文件夾mongodb,并且建立子目錄db和log.
[if !supportLists]2、[endif]在log目錄下建立一個文件MongoDB.log ,后綴為.log.
d:\mongodb\db、d:\mongodb\log,?分別用來存放數(shù)據(jù)庫文件和數(shù)據(jù)庫日志文件.
3、把mongodb文件夾的只讀屬性去掉。
[if !supportLists]4.4.?[endif]啟動MongoDB
以管理員身份運行cmd.exe,進(jìn)入dos命令界面,執(zhí)行下列命令
>?mongod ?--storageEngine mmapv1?--dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log"?
執(zhí)行后,就掛起了,需要另外開命令窗口測試是否啟動成功。
[if !supportLists]4.5.?[endif]測試連接
原來的cmd窗口不關(guān)閉,以管理員身份再開一個cmd窗口,輸入mongo或者mongo.exe,出現(xiàn)如下信息說明測試通過,此時我們已經(jīng)進(jìn)入了test這個數(shù)據(jù)庫。
從上圖可以看出,我們進(jìn)入了mongodb的shell
輸入exit或者ctrl+C可退出。
[if !supportLists]4.6.?[endif]將MongoDB安裝為windows服務(wù)(重點中的重點)
當(dāng)mongod.exe被關(guān)閉時,mongo.exe 就無法連接到數(shù)據(jù)庫了,因此每次想使用mongodb數(shù)據(jù)庫都要開啟mongod.exe程序,所以比較麻煩,此時我們可以將MongoDB安裝為windows服務(wù)
以管理員身份運行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
接著啟動mongodb服務(wù)
?? >?NET START MongoDB
打開任務(wù)管理器,可以看到進(jìn)程已經(jīng)啟動。
?? 再次測試連接
? > mongo
[if !supportLists]4.7.?[endif]關(guān)閉服務(wù)和刪除進(jìn)程
先ctrl+c
關(guān)閉服務(wù):net stop MongoDB?
[if !supportLists]5.?[endif]MongoDB基礎(chǔ)使用
[if !supportLists]5.1.?[endif]常用的命令(重點)
? > 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????
[if !supportLists]5.1.1.?[endif]增加數(shù)據(jù)(重點中的重點)
db.web.save({"name":"老李"}) ? ?創(chuàng)建了名為web的集合,并新增了一條{"name":"老李"}?的數(shù)據(jù)
db.web.insert({"name":"ghost", "age":10}) ? ?在web集合中插入一條新數(shù)據(jù),如果沒有web這個集合,mongodb會自動創(chuàng)建
save()和insert()也存在著些許區(qū)別:若新增的數(shù)據(jù)主鍵已經(jīng)存在,insert()會不做操作并提示錯誤,而save() 則更改原來的內(nèi)容為新內(nèi)容。
_id是主鍵,主鍵是每條數(shù)據(jù)的唯一標(biāo)識,不能重復(fù),就像身份證是每個人唯一的編號一樣。
存在數(shù)據(jù):{ _id : ObjectId("57e8d34b4764fb71d0a89caa"), " name " : "老李"},_id是主鍵
insert({ _id : ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王?" }) ? ?會提示錯誤
save(ObjectId("57e8d34b4764fb71d0a89caa"), " name " : " 老王?" })?會把 “老李”改為“?老王”,有update的作用。
[if !supportLists]5.1.2.?[endif]刪除數(shù)據(jù)(重點中的重點)
1、刪除文檔
2、刪除集合
3、刪除數(shù)據(jù)庫
[if !supportLists]·?[endif]db.users.remove({}) ? ?刪除users集合下所有數(shù)據(jù)
[if !supportLists]·?[endif]db.users.remove({"name": "lecaf"}) ? 刪除users集合下name=”lecaf”的數(shù)據(jù)
[if !supportLists]·?[endif]db.users.drop()或db.runCommand({"drop":"users"}) ? ?刪除集合users
[if !supportLists]·?[endif]db.runCommand({"dropDatabase": 1}) ???刪除當(dāng)前數(shù)據(jù)庫,注意此處的1沒加雙引號。
[if !supportLists]5.1.3.?[endif]查找數(shù)據(jù)(重點中的重點)
[if !supportLists]·?[endif]db.users.find() ? ?查找users集合中所有數(shù)據(jù)
[if !supportLists]·?[endif]db.users.findOne() ? ?查找users集合中的第一條數(shù)據(jù)
[if !supportLists]·?[endif]db.users.find().pretty() 格式化查詢到的數(shù)據(jù)
[if !supportLists]5.1.4.?[endif]修改數(shù)據(jù)(重點中的重點)
[if !supportLists]·?[endif]db.web.update({"name":"a1"}, {"age":10}) ? ?修改name=a1的數(shù)據(jù)為sex=1,第一個參數(shù)是查找條件,第二個參數(shù)是修改內(nèi)容,主鍵不能修改,如圖
[if !supportLists]5.2.?[endif]MongoDB高級命令(重點)
[if !supportLists]5.2.1.?[endif]條件查找
學(xué)習(xí)用命令的意義在于:我們做系統(tǒng)的時候,后端人員需要給前端開發(fā)人員提供數(shù)據(jù),如果后端人員用可視化工具,只是他自己眼睛能看到,但是如果要把這些數(shù)據(jù)提供給前端,他需要用代碼去查數(shù)據(jù)庫,把查詢的結(jié)果返回給前端。
為此:老師給大家整理了下以下這些常見的查詢例子,如果你以后忘記了,就翻出來看看。
提前做了一個歌手的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" :?{ $gt: value }?}) ? ?key > value
例2:查找年齡大于53的歌星。
語法3:db.collection.find({ "key" :?{?$lt: value }?}) ? ?key < value
例3:查詢年齡小于35歲的歌星。
語法4:db.collection.find({ "key" :?{ $gte: value }?}) ? ?key >= value
例4:查詢成績大于等于95的歌星。
語法5:db.collection.find({ "key" :?{?$lte: value }?}) ? ?key <= value
例5:查詢年齡在小于等于32歲的歌星。
語法6:db.collection.find({ "key" :?{ $gt: value1 , $lt: value2?}?}) ? value1 < key <value2
例6:查找年齡在30-40歲之間的歌星。
語法7:db.collection.find({ "key" :?{?$ne: value }?}) ? ?key <> value
例7:查詢外國歌手。
分析:條件為 country不等于”中國”
語法8:db.collection.find({ "key"?: { $mod : [ 10 , 1 ] } })取模運算,條件相當(dāng)于key % 10 == 1 即key除以10余數(shù)為1的
例8:查詢成績?yōu)? 、15、25、。。。。95的歌星。
語法9:db.collection.find({?"key"?: { $in: [ 1, 2, 3 ] } })屬于,條件相當(dāng)于key等于[ 1, 2, 3 ]中任何一個.
例9:查詢序號(num)為3或者6或者9的歌星。
語法10:db.collection.find({?"key"?: { $nin: [ 1, 2, 3 ] } })不屬于,條件相當(dāng)于key的值不屬于[ 1, 2, 3 ]中任何一個。
例10:查詢國籍不為美國和韓國的歌手。
語法11:db.collection.find({ "key"?: { $size: 1 } }) ? ?$size數(shù)量、尺寸,條件相當(dāng)于key對應(yīng)的值的數(shù)量是1(值必須是數(shù)組)
這個有點難理解,通過例子理解容易些:
每個歌星都有代表作,并且代表作是數(shù)組。
例11:查詢有3個代表作品的歌手。
語法12:db.collection.find({ "key"?: { $exists : true|false } }) ? ?
$exists字段存在,true返回存在字段key的數(shù)據(jù),false返回不存在字段key的數(shù)據(jù)
例12-1:查詢包含tel字段的數(shù)據(jù)。
之前的數(shù)據(jù)字段都是一樣的,此時插入一條數(shù)據(jù){"name":"test","tel":"15388889999"}
然后查詢:
例12-2:查詢不包含tel字段的數(shù)據(jù)
語法13:db.collection.find({ $or : [{a : 1}, {b : 2} ] }) ?
符合兩個條件中任意一個的數(shù)據(jù)。$or語法表示或的意思。(注意:MongoDB 1.5.3后版本可用),符合條件a=1的或者符合條件b=2的數(shù)據(jù)都會查詢出來。
例13:某個娛樂公司15個人,資料都在數(shù)據(jù)庫里面,某個活動必須要劉德華參加,另外需要團隊的全部女歌手配合演出,領(lǐng)導(dǎo)安排你幫忙打印歌手的資料。
db.collection.find({ "key.subkey" :value })內(nèi)嵌對象中的值匹配,注意:"key.subkey"必須加引號。
例14:插入一條測試數(shù)據(jù)
db.singer.insert({"name":"test2",score:{"yy":80,"sx":79,"wy":95}})
此數(shù)據(jù)的score對應(yīng)的值是一個對象。
例14:查詢語文成績?yōu)?0的同學(xué)。
[if !supportLists]5.2.2.?[endif]排序
db.collection.find().sort({ "key1" : -1 ,"key2" : 1 })這里的1代表升序,-1代表降序
例1:對所有歌星安年齡排序。
例2:對所有歌星先按年齡降序排列,再按score字段降序排列。
[if !supportLists]5.2.3.?[endif]索引
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時必須掃描集合中的每個文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數(shù)據(jù)時,查詢可以要花費幾十秒甚至幾分鐘,這對網(wǎng)站的性能是非常致命的。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲在一個易于遍歷讀取的數(shù)據(jù)集合中,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)
例如:我們查詢張三的時候db.singer.find({"name":"張三"})
如果沒有對name字段建立索引,數(shù)據(jù)庫在查詢的時候會掃描所有的數(shù)據(jù),如果數(shù)據(jù)量小的時候,感覺不出來速度慢,當(dāng)數(shù)據(jù)越來越多的時候,就會越來越慢。
這個時候如果給name建立一個索引,查詢速度就會加快。
MongoDB使用 ensureIndex() 方法來創(chuàng)建索引。
ensureIndex()方法基本語法格式如下所示:
>db.COLLECTION_NAME.ensureIndex({KEY:1})
對name字段建立一個索引如下:
可視化工具里面可以看到剛創(chuàng)建的索引:
語法中Key值為你要創(chuàng)建的索引字段,1為指定按升序創(chuàng)建索引,如果你想按降序來創(chuàng)建索引指定為-1即可。
實例
>db.col.ensureIndex({"title":1})>
ensureIndex()方法中你也可以設(shè)置使用多個字段創(chuàng)建索引(關(guān)系型數(shù)據(jù)庫中稱作復(fù)合索引)。
>?db.col.ensureIndex({"title":1,"description":-1})
[if !supportLists]5.2.4.?[endif]其他
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()這兩個操作時,要獲得實際返回的結(jié)果數(shù),需要一個參數(shù)true,否則返回的是符合查詢條件的結(jié)果總數(shù)
模糊查詢:
db.collection.find({"name":/ab/})
以上是常見的查詢,如果工作中遇到更加復(fù)雜的需求,可以通過查文檔來解決。
[if !supportLists]5.3.?[endif]使用可視化工具
[if !supportLists]5.3.1.?[endif]插入
1)右鍵點擊集合名-左鍵點擊InsertDocument?
2)在彈出的對話框里輸入Json格式的數(shù)據(jù),點擊Insert完成插入。?
[if !supportLists]5.3.2.?[endif]查詢
1)選中要查詢的集合,點擊find;?
? 或點擊工具欄中的find;
2)查詢界面包括四個區(qū)域?
[if !supportLists]5.3.3.?[endif]刪除
選中要操作的集合,點擊Remove進(jìn)入刪除面板,輸入要刪除數(shù)據(jù)的查詢條件,點擊Remove,在彈出的提示框中確認(rèn)刪除即可。
[if !supportLists]5.3.4.?[endif]修改
選中要操作的集合,點擊Update進(jìn)入修改面板;
左側(cè)輸入查詢條件,右側(cè)輸入要更新的字段名稱和值; 格式如:{$set:{"score":100}}