MongoDB使用實際很簡單


MongoDB使用實際很簡單

MongoDB是個文檔型數據庫,雖然前有CouchDB夾擊,後有MySQL 8.x文檔支持的追趕,但是絲毫不影響它在市場中佔據的份額。

前言

最近有個開發妹子跟我說MongoDB的操作好複雜,先是跟以往關係型數據庫的操作不一樣,後是在Windows上操作實在是各種煩心和不容易。於是,花了點時間寫了個愛心版的教程。

總體而言,MongoDB的操作並不算多麼複雜,只是沒有理解它的作用還有就是用錯了平臺。像MongoDB這樣的數據庫還是使用Linux比較妥當,直接幾個命令就解決了。還有,開發最好還是用Mac,比較省心。

閒話不說,還是從頭開始說起,一步步起來,大概20分鐘就上路了。

環境搭建

既然要使用MongoDB自然離不開環境的搭建,對於Linux的源可以選擇:

  • 官方, http://repo.mongodb.org/
  • 阿里雲, http://mirrors.aliyun.com/mongodb/

而要下載的是二進制的版本,對於Windows其對應的地址為 https://www.mongodb.org/dl/win32/,而Linux為 https://www.mongodb.org/dl/linux/x86_64。進去下載你需要的版本就好。

這裡選擇下載的是Windows的3.x版本。下載完成後,解壓到你喜歡的1個地方,接著為了方便操作,打算文本編輯器,寫2個啟動腳本。省的每次都手動輸入一大段參數。

Windows啟動腳本

創建1個 start.bat的批處理腳本,其內容如下:

@echo off
SET PATH=%PATH%;D:Program FilesMongoDBServer.6in
mongod -f db.conf

其中PATH這部分後面,將它替換為你實際解壓的目錄中。其中,在命令mongod中使用選項 -f指定對應的配置文件,省的每次都要手動在命令行中指定參數。而MongoDB是支持YAML格式的配置的,而這裡還是以INI的格式來配置參數。

而配置文件中內容如下:

dbpath=D:/mongodb-database
logappend=true
port=27017
bind_ip=127.0.0.1

其中dbpath指定了MongoDB中數據庫的路徑。默認情況下是當前解壓目錄盤符下data目錄,如果對應目錄不存在或不為空,直接就是閃退,無法啟動數據庫程序了。

之後的logappend用於日誌的追加輸出,至於port和bind_ip自然是監聽的端口和地址了。

Windows停止腳本

既然編寫了1個啟動腳本,無妨也寫1個bat腳本用於停止數據庫服務器,其內容如下:

@echo off
SET PATH=%PATH%;D:Program FilesMongoDBServer.6in
mongo mongod_stop.js

唯一的區別是最後1行,使用的是mongo程序,後面緊著著1個js文件。而在對應 mongod_stop.js中內容如下:

db 
=
connect
(
"localhost:27017/admin"
);
db
.
shutdownServer
();
quit
();

而這段代碼的意義就是連接到對應的admin數據庫中,調用其shutdownServer方法關閉服務器,最後退出程序。當然,這裡並沒有設置對應的認證信息。而在本地環境上,即使使用createUser設置了認證方式,也是不起效的。詳情可以查看 https://docs.mongodb.com/manual/reference/method/db.createUser/#local-database。

對於遠程服務器,則必須添加權限認證,否則任何人都可以訪問你的數據庫服務器了。而對應的方式如下所示。

權限認證

要進入需要認證的數據庫中,需要調用 db.createUser創建用戶,例如:

db
.
createUser
({
user
:
"test"
,
pwd
:
"123456"
,
roles
:[{
role
:
"readWrite"
,
db
:
"test"
}]})

這裡創建了1個test的用戶,密碼為123456。該用戶屬於的角色為readWrite組,分配的數據庫為test。

之後可以通過如下的語句進行權限認證:

db
.
auth
({
user
:
"test"
,
pwd
:
"123456"

})

更多內容可以訪問 https://docs.mongodb.com/manual/reference/method/db.createUser/。

MongoDB概念

MongoDB數據庫中概念,實際上中沒有多少東西。排開什麼分片、地理索引等附加內容外,唯一的東西應該就是文檔了。然而,它這裡的文檔與我們常見的文本格式還是有區別的。

在MongoDB中的文檔格式就是類似1個JSON的格式,比如:

{

"name"
:

"張三"
,

"age"
:

20
,

"sex"
:

"男"
}

而對應的關係型數據庫中表的概念是根本不存在的,但是我們可以將上述這樣1個文檔看成是關係型數據庫中的1張表。而其中的name、age以及sex字段看成是關係型數據庫的列字段。當然二者並不是等價的。

而為了能存儲上述的內容,我們需要創建1個文檔,比如將它命名為1個 user.json的文件。然而在MongoDB中這樣1個文件可以將其看成是關係型數據庫中的數據庫名稱。

簡單的說,就是類似下表所示的關係:

關係型數據庫MongoDB數據庫文檔名稱表文檔內容列文檔字段

至於索引什麼的,基本上一般數據庫都會提供,這屬於數據壓縮及信息論範疇中的內容了,就不展開說明了。

MongoDB操作

實際上,MongoDB中的指令操作與MySQL很類似,比如查看數據庫的操作為:

show databases;

而查看有哪些數據表,使用的是 show collections而不是 show tables。但是MongoDB中提供了1個 show tbs。

需要注意的是,在MongoDB中採用了1種延緩加載機制,只有存在數據才生成文檔。換句話說,只有往某個文檔中插入了數據才會生成對應的集合(關係型數據庫中的表),否則你查看數據表中是獲取不到對應期望的結果的。

而對於查詢操作,可以使用如下的語法:

db.表名.find() #方法一
db.表名.find({"字段":"值"}) #方法二

對於方法一,等同於 select*from表名,而對於後者等同於 select*from表名where字段=值。

另1個很有用的技巧就是,默認輸出的文檔是沒有格式處理的,為了方便查看效果,常常需要使用格式化輸出,此時可以在選擇後追加1個pretty方法,即:

db.表名.find().pretty()

如果實在不知道該調用什麼方法,可以使用help方法來查看,即:

db.表名.help()
db.help()

之後MongoDB會將內置js中的內容輸出。

最後是CRUD對應的方法:

  • insert,插入
  • remove,刪除
  • update,更新
  • find,查詢

這樣,基本上MongoDB就算入門了。更多的內容,還是等到需要的時候再慢慢摸索吧。

參考:

https://www.cnblogs.com/gy-ph/p/7725172.html


分享到:


相關文章: