mongodb一直有所耳聞,但由于公司業(yè)務(wù)架構(gòu)中并未重度使用(涉及到的地方開發(fā)人員自行維護并未接入主體架構(gòu)),所以一直以來沒有接觸。近期有空,準(zhǔn)備學(xué)習(xí)一下。本套筆記純當(dāng)做個記錄,記錄一下我的mongodb學(xué)習(xí)歷程。也希望能夠幫助瀏覽到的朋友們,新手可以跟我一起學(xué)習(xí)進步!高手請飄過~
當(dāng)然,學(xué)習(xí)一款數(shù)據(jù)庫,第一步要找到它的官網(wǎng)和官方文檔。
官方網(wǎng)站:不讓放
官方文檔:不讓放
老實說,界面風(fēng)格非常符合我的審美!有點喜歡它了~
簡單讀了它的介紹,我總結(jié)了幾點特性:
- NoSQL類型之文檔類型數(shù)據(jù)庫
- 部署,擴展都很靈活
- 內(nèi)生的集群特性
其他還有什么高性能,API,支持多存儲引擎blabla,沒啥用~
這里產(chǎn)生了幾個疑問,留待后續(xù)學(xué)習(xí)去回答,我覺得帶著問題學(xué)習(xí)比較有效果。
1.MongoDB documents are similar to JSON objects.文檔中說mongodb存儲的基本單元叫文檔,類似于mysql當(dāng)中的一條記錄。跟大名鼎鼎的JSON對象類型很像,后續(xù)也讀到了,是BSON類型。那么到底兩者區(qū)別在哪里?
2.讀到了API這一節(jié),發(fā)現(xiàn)mongodb的API是自己獨有的,也就是說不能使用SQL語句進行查詢,即存在學(xué)習(xí)成本,那么,它的優(yōu)勢是什么?這種js類的API是否會導(dǎo)致查詢性能下降,這個很關(guān)鍵!

3.有預(yù)感,之前也有耳聞,mongodb的集群功能是它的一個靚點也是優(yōu)勢,后面的學(xué)習(xí)中要重點觀察它集群方面的設(shè)計思想!
好了,簡單了解之后,我用自己的話總結(jié)了一下:mongodb是一個非關(guān)系型數(shù)據(jù)庫,采用庫-表-行的形式進行存儲,官方叫庫-集合-文檔(whatever),不拘泥于schema設(shè)計,也就是說mysql中的在線DDL老大難問題在這里不存在!
接下來,就該動手了,今天計劃是先把它裝上,并插入第一條數(shù)據(jù)!
安裝這里,官方文檔中給出了yum安裝,二進制包安裝,docker方式等,至于docker,鑒于數(shù)據(jù)庫這種狀態(tài)機,最好還是別用了,畢竟哪一天真的用于生產(chǎn)了還是單獨部署穩(wěn)妥。(by the way!我個人審美:非狀態(tài)機強烈建議用docker,它真的方便...... 狀態(tài)機強烈不建議用docker,不要聽云廠商的忽悠!不要聽云廠商的忽悠!不要聽云廠商的忽悠!)

mongodb也分為企業(yè)版,免費版,以及提供了高級客戶端mongodb shell,這點怎么跟mysql一模一樣。
因為是新接觸,這次先用yum快速裝一下,后續(xù)再去了解二進制包方式。
安裝步驟如下:
1.安裝yum源:
vi /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
2.安裝默認最新版
yum install -y mongodb-org
安裝后的默認路徑:
/var/lib/mongo (the data directory)
/var/log/mongodb (the log directory)
如果想要查看默認安裝的各類信息可以執(zhí)行以下命令:
systemctl cat mongod
可以發(fā)現(xiàn)配置文件為:/etc/mongod.conf,后續(xù)修改配置可以調(diào)整這個文件。
這里默認路徑就不改了,今天首要目標(biāo)是先用起來!
3.啟動
查看進程管理模式:
ps --no-headers -o comm 1
應(yīng)該都是systemd吧?
啟動:
systemctl daemon-reload
systemctl start mongod
查看是否啟動:
systemctl status mongod
連接:
mongosh
檢查后臺進程,發(fā)現(xiàn)27017端口啟動了,它就是mongodb的服務(wù)端口:

連接后如圖:

已經(jīng)可以正常使用了。接下來插入一條數(shù)據(jù)試試:
按照官方給出的例子粘貼并執(zhí)行:

可以看到生成了一個ObjectID,這個很像mysql的主鍵,應(yīng)該是唯一的。帶著疑問進行一次查詢:

印證了猜想,也就是說,mongodb插入數(shù)據(jù)時,不需要指定主鍵,它會自動生成一個字段叫做_id,作為本條記錄的唯一標(biāo)識。
觀察了一下,發(fā)現(xiàn)mongodb的API都是函數(shù)的形式,類似 db.表.xx() 的形式??磥碛幸欢ǖ膶W(xué)習(xí)成本,但是在如今有GPT加持的時代,問題不大~
上面find函數(shù)中的item:"canvas" 應(yīng)該就是類似于where過濾條件,所以試試不加參數(shù):

依然能夠查到數(shù)據(jù),推理這個就是select * from inventory;
本次先到這里,最后感嘆一句,mongodb官方文檔整理的是真好,集成度很高,不用到處找這找那,這種有大公司保障的產(chǎn)品確實靠譜。