iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0

第二天,首先我打算先把Mongo DB環境建起來

為了方便,就用docker在local部屬 Mongo DB的image來省去實機安裝的工

首先是安裝Docker,
(到docker的官方網站下載Docker ,因為我以前就裝好了,所以安裝過程略過)

Docker對現在的程式開發者、電腦潔癖幾乎已經是離不開的工具了,
他最大的優點是部屬非常方便、確保環境的一致
只要有一台有安裝docker的PC或Server,
那麼不論這台電腦是Linux或是Windows,只要系統資源足夠,
那就只需要把Docker image run起來就能把想要的服務建起來了,
微服務架構的系統也幾乎都是以這類docker容器化技術來實現,

雖然我自己對Docker其實也只是會用而已,談不上精通
但對於軟體工程師來說,不論專精前端還是後端,
我覺得Docker已經是除了git之外的第二個必備技能了

在學Docker首先會遇到的兩個名詞:Image 跟 Container

Image(映像檔),可以把它想像成一份設計圖
Container(容器),就像是設計圖建立起來的建築物,

docker運行環境建置完成後,就是用這兩樣東西來建立Mongo DB

首先 在cmd下指令,將最新版Mongo DB 的image取下來:

docker pull mongo:latest

接著執行

docker run --name mongo -v /d/tmp/mongo/data:/data/db -d -p 27017:27017 mongo:latest

將Mongo 運行起來
docker run 指令 以指定的image為基準,建立一個container

--name 指定建起來的container名字
-v 連結local端目錄與container目錄 (像Linux中mount共用空間的概念)
-d 背景執行
-p 指定將docker內的某port與本地端的某port連結在一起 ,透過這樣的設定就可以透過本地直接連container了

進入container中 可以看看這是什麼版本的Mongo

mongo -version
MongoDB shell version v5.0.2

當下的latest版本是5.0.2

這邊為了方便測試,我安裝了Studio 3T這個Mongo DB專用的圖形化介面工具,方便我們測試與查看資料庫內容
它本身是付費工具,不過有30天的免費試用,30天不用白不用,到期後可以改為使用免費的Robo 3T

安裝完成後先建立連線
https://ithelp.ithome.com.tw/upload/images/20210917/201289732U5EPh0kfY.png

建立連線後 選擇IntelliShell
https://ithelp.ithome.com.tw/upload/images/20210917/20128973sa4kNsVWCp.png

use [DB Name]

↑是切換DB的指令,如果沒有這個DB,就會直接新增它

use testDB;

↑建立testDB這個資料庫

show dbs;

↑可以看到目前存有哪些資料庫
https://ithelp.ithome.com.tw/upload/images/20210917/20128973OyjkmTdQFJ.png

輸入指令建立新的User 作為後端連接資料庫時使用

use admin

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

https://ithelp.ithome.com.tw/upload/images/20210917/20128973UdhMnA0Uqu.png

也建一個root

db.createUser(
    {
        user:"root",
        pwd:"root",
        roles:["root"]
    }
)

因為暫時還沒找到讓登入驗證立即生效的做法,
所以我目前是這樣做:
在cmd下docker指令

#停止mogo這個container
docker stop mongo
#移除mongo這個container
docker rm mongo

加上--auth以需要驗證的方式重建mongo的container

docker run --name mongo -v /d/tmp/mongo/data -d -p 27017:27017 mongo:latest mongod --auth

因為我們把data都bind在/d/tmp/mongo/data:/data/db ,所以先前的設定都還保留著

看看一下是否成功

https://ithelp.ithome.com.tw/upload/images/20210917/20128973MX8RZQ8QnP.png

測試連線ok

https://ithelp.ithome.com.tw/upload/images/20210917/20128973J5FEuMwqTs.png

在testDB試著insert一筆資料試試看

use testDB;

try {
   db.products.insertOne( { item: "card2", qty: 150 } );
} catch (e) {
   print (e);
};

再查詢看看有沒有insert進去

db.getCollection("products").find({});

https://ithelp.ithome.com.tw/upload/images/20210917/20128973zF17MKn3GO.png
看來是有的

NOSQL除了在處理大量資料效能優異之外,使用上也非常有彈性,
在Mongo DB 沒有table,取而代之的是collection,collection中所存的資料是一筆筆的document,
在insert document時,不像在傳統的RDMS上會受限於TABLE的欄位設計,
然而,這不代表我們就不用規劃資料的儲存格式與架構,
畢竟在沒有規範的情況下,隨著時間拉長,維運的成本會變得很可怕

在MongoDB的文件裡還有很多方法使用,大家可以去試試看

MongoDB的準備就到這裡差不多告一個段落

明天就來準備後端吧


上一篇
[Day 01] - 前言-在開始之前
下一篇
[Day 03] - Spring Boot 前置作業
系列文
30天全端挑戰!React+Spring Boot+Mongo DB 串接永豐API 打造金融網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言