MongoDB4.X基礎(chǔ)教程

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB是一個(gè)介于關(guān)系型數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BJSON格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
MongoDB數(shù)據(jù)操作基于json格式
二、MongoDB安裝
1. MongoDB下載
下載地址:https://www.mongodb.com/try/download/community

2.MongoDB安裝
下載的 .msi 文件,下載后雙擊該文件,按操作提示安裝即可。
安裝過程中,你可以通過點(diǎn)擊 “Custom(自定義)” 按鈕來設(shè)置你的安裝目錄,建議不要安裝在C盤。

全程點(diǎn)擊next安裝,但是這一步需要注意,這里是安裝可視化組件,默認(rèn)是選擇狀態(tài),這里需要取消選中,否則在安裝的過程中要下載可視化組件,比較慢,甚至有時(shí)候會(huì)報(bào)錯(cuò):

3.MongoDB環(huán)境變量配置
在桌面右鍵 此電腦>>>屬性>>>高級(jí)系統(tǒng)設(shè)置>>>高級(jí)>>>環(huán)境變量>>>找到path>>>選擇編輯>>>新建

在打開的環(huán)境變量中MongoDB安裝的bin路徑復(fù)制到新建目錄中

然后點(diǎn)擊所有的確定即可完成環(huán)境變量配置
4.驗(yàn)證安裝是否成功
打開CMD命令窗口,輸入mongo,出現(xiàn)以下提示信息,說明安裝成功。
三、MongoDB使用基本介紹
MongoDB屬于非關(guān)系型數(shù)據(jù)庫,其數(shù)據(jù)庫、表、字段等和關(guān)系型數(shù)據(jù)庫(如:MySQL數(shù)據(jù)庫)有一定的差別;
MongoDB中的集合就相當(dāng)于關(guān)系型數(shù)據(jù)庫中的表
MongoDB中的json字符串的鍵相當(dāng)于關(guān)系型數(shù)據(jù)庫中的列名;
在操作MongoDB數(shù)據(jù)的時(shí)候全部使用json數(shù)據(jù)格式。
1.查看數(shù)據(jù)庫名
查看所有數(shù)據(jù)庫名
這三個(gè)數(shù)據(jù)庫是默認(rèn)系統(tǒng)數(shù)據(jù)庫,不能刪除。
2. 查看集合
查看集合前提是要先指定使用哪一個(gè)數(shù)據(jù)庫是用命令
就是admin這個(gè)數(shù)據(jù)庫中的表
3.查詢集合中的數(shù)據(jù)
這里先簡單介紹查詢集合中的所有數(shù)據(jù),方便后面學(xué)習(xí)。
查詢集合中的所有數(shù)據(jù),這里查詢的是系統(tǒng)數(shù)據(jù)庫admin中的
集合
這里的_id是集合的鍵,每個(gè)集合里面默認(rèn)存在,version是集合中的另一個(gè)鍵,相當(dāng)于關(guān)系型數(shù)據(jù)庫中的字段
四、創(chuàng)建數(shù)據(jù)庫及添加數(shù)據(jù)
MongoDB不能夠直接創(chuàng)建數(shù)據(jù)庫,需要添加一條數(shù)據(jù)才能創(chuàng)建
1.創(chuàng)建數(shù)據(jù)庫和插入數(shù)據(jù)
先指定創(chuàng)建的數(shù)據(jù)
然后執(zhí)行添加數(shù)據(jù)命令
這里插入了6列數(shù)據(jù),分別是員工的編號(hào),姓名,性別,年齡,薪資及所在的部門
表示一行數(shù)據(jù)插入成功,說明創(chuàng)建數(shù)據(jù)成功,同時(shí)添加了一套數(shù)據(jù),我們可以繼續(xù)添加
隨著數(shù)據(jù)的插入,數(shù)據(jù)庫也隨著創(chuàng)建成功。
五、查詢數(shù)據(jù)
查詢所有數(shù)據(jù),在查詢數(shù)據(jù)前要先指定使用哪個(gè)數(shù)據(jù)庫,再查詢數(shù)據(jù)庫中的所有集合,根據(jù)相應(yīng)集合再查詢數(shù)據(jù)。
1. 查詢所有數(shù)據(jù)
2.去掉集合中重復(fù)的數(shù)據(jù)
3. 查詢年齡等于25的數(shù)據(jù)
這里的“age”可以不加“ ”,直接寫成{age:25}
4. 查詢ename=“李元芳“的數(shù)據(jù)
5. 查詢age>30歲的員工數(shù)據(jù)
6. 查詢age<25的員工數(shù)據(jù)
7.查詢age>=30的員工數(shù)據(jù)
8. 查詢age<=30的員工數(shù)據(jù)
9. 查詢age>=25并且age<=30的員工數(shù)據(jù)
10. 查詢?nèi)啃绽畹膯T工數(shù)據(jù)(模糊查詢)
模糊查詢一般用于查詢數(shù)據(jù)量比較小的集合數(shù)據(jù)
11. 查詢姓名以“張”開頭的員工數(shù)據(jù)
12. 查詢以姓名以“靜”結(jié)尾的員工數(shù)據(jù)
13. 查詢指定列的員工數(shù)據(jù)
查詢所有員工年齡的數(shù)據(jù)
查詢所有員工的姓名和年齡的數(shù)據(jù)
查詢age>=30的員工姓名、年齡和薪資
14. 排序
按照年齡升序排列
按照薪資降序排列
15. 查詢ename=admin且age=20的員工數(shù)據(jù)
16. 查詢前5條數(shù)據(jù)
17. 查詢10條以后的數(shù)據(jù)
這里一共12條數(shù)據(jù),查詢10條以后的數(shù)據(jù),結(jié)果是兩條數(shù)據(jù)。
18. 查詢集合中的總數(shù)據(jù)
一共12條數(shù)據(jù)
查詢salary>=5000的員工數(shù)量
驗(yàn)證(查詢查詢salary>=5000的員工數(shù)據(jù),一共是6條。)
19. 分頁查詢
按照每頁顯示5條數(shù)據(jù)查詢,一共12條數(shù)據(jù),就要查詢3頁
skip的值=(頁數(shù)-1)* 每頁顯示數(shù)量
skip(N):表示要查詢第N條數(shù)據(jù)后的數(shù)據(jù)
20.關(guān)鍵字or的查詢方式
查詢年齡是30或者年齡是35的員工數(shù)據(jù)(注意寫法)
21. 查詢第一條數(shù)據(jù)
或
22. 查詢當(dāng)前表所在的數(shù)據(jù)庫
六、更新數(shù)據(jù)
更新數(shù)據(jù)一定要有條件限制,并且需要加上
否則會(huì)全部修改
第一個(gè)參數(shù)是條件,后面的參數(shù)是要修改的數(shù)據(jù)或者是其他操作,比如批量操作
1. 更新員工李元靜的年齡為32歲
驗(yàn)證(查詢姓名是李元靜的員工數(shù)據(jù))
2. 更新員工李元靜的薪資為1600并且所在部門修改為30
驗(yàn)證(查詢姓名是李元靜的員工數(shù)據(jù))
3. 批量更新數(shù)據(jù)
把年齡是35歲的更新為34歲
設(shè)置第三個(gè)參數(shù):
通過
驗(yàn)證所有數(shù)據(jù)沒有年齡為35的員工
4. $inc使用
$inc將一個(gè)字段的值增加或者減少
把李元芳的年齡減少1歲,同時(shí)薪資加2000
驗(yàn)證
七、刪除操作
1. 刪除指定條件的數(shù)據(jù)
2. 刪除所有數(shù)據(jù)
2. 刪除所有數(shù)據(jù)
3. 刪除集合
4.刪除數(shù)據(jù)庫
5. 溫馨提示
對(duì)數(shù)據(jù)庫數(shù)據(jù)執(zhí)行刪除操作時(shí),記得加條件!
八、MongoDB數(shù)據(jù)庫索引
MongoDB數(shù)據(jù)庫索引是指對(duì)數(shù)據(jù)庫集合中的一列或者多列進(jìn)行排序的一種結(jié)構(gòu),可以大大縮減我們在使用數(shù)據(jù)庫查詢時(shí)候的時(shí)間,其用法和關(guān)系型數(shù)據(jù)庫一樣。
1. 模擬批量插入數(shù)據(jù)
在使用數(shù)據(jù)庫前,我們創(chuàng)建一個(gè)com數(shù)據(jù)庫和users集合,模擬60萬條數(shù)據(jù)
PS:插入60萬條數(shù)據(jù)大概需要5分鐘
驗(yàn)證數(shù)據(jù)
2.無索引查詢所耗費(fèi)時(shí)間
通過
可以知道查詢所耗費(fèi)時(shí)間為254毫秒,當(dāng)然這與計(jì)算機(jī)配置性能有關(guān)。
3. 創(chuàng)建索引
為userNo創(chuàng)建索引
4. 查詢索引
_id為集合默認(rèn)id索引,userNo是自定義索引
5. 使用索引查詢所耗費(fèi)時(shí)間
用索引查詢userNo的值,可以通過
知道,所耗費(fèi)的時(shí)間為0毫秒,大大縮短了查詢速度
6. 刪除索引
驗(yàn)證
可以看出,我們自定義的索引已經(jīng)刪除
7. 復(fù)合索引
當(dāng)要對(duì)多個(gè)字段進(jìn)行經(jīng)常性大量查詢的時(shí)候,我們可以設(shè)置復(fù)合索引
查看復(fù)合索引
userNo和userName是我們自定義的索引
查詢userName:”張三599999”所耗費(fèi)時(shí)間
通過
可以看出,查詢userNo和userName只需要2毫秒
注意:如果在一個(gè)集合中,對(duì)多個(gè)字段設(shè)置索引N(N!=1),在使用復(fù)合索引查詢的時(shí)候,要連同第一個(gè)索引字段一起查詢,如果只單單查詢第N個(gè),索引將沒有效果。
8.唯一索引
創(chuàng)建唯一索引的條件是,集合中字段的數(shù)據(jù)不能重復(fù),但在缺省情況下創(chuàng)建是索引均不是唯一索引
由于集合中的age都是一樣的值,在給age創(chuàng)建唯一索引的時(shí)候會(huì)報(bào)錯(cuò)
為age創(chuàng)建唯一索引,失敗