MongoDB:開源、好上手的 NoSQL 資料庫

MongoDB 是個開源的 NoSQL 資料庫,由於你不需要花很多時間先制定每張資料表要長怎樣、畫出 ER Model,因此不管是用來做 Side-project,還是用來塞大量資料都很適合。

MongoDB:開源、好上手的 NoSQL 資料庫

MongoDB 是個開源的 NoSQL 資料庫,由於你不需要花很多時間先制定每張資料表要長怎樣、畫出 ER Model,因此不管是用來做 Side-project,還是用來塞大量資料都很適合。

MongoDB 是什麼

NoSQL 的全名是 Not only SQL。而 MongoDB 的 Logo 是個葉子,並不是一顆芒果,仔細看它是 Mongo 而不是 Mango,這邊不要搞錯了。

就像 Kangaroo 的中文並不是長頸鹿。

MongoDB 是用 Key-value 的方式來儲存資料,長得大概像這樣子:

{
    name: "NoobTW",
    url: "https://noob.tw"
}

長的就跟 JSON 沒什麼兩樣。值得注意的是:MongoDB 用的是所謂 BSON 而不是 JSON、每筆資料的 key 和 value 都是區分大小寫的。

BSON 是 Binary JSON 的縮寫,就是拿 JSON 下去擴充,所以可以塞 Binary data 等 JSON 不能塞的東西。

在 MongoDB 中,每筆資料稱為一個 Document,大概就是對應到傳統資料庫的 Row。而裝這些 Documents 的叫做 Collection,也差不多可以對應到傳統資料庫的 Table

資料庫則是一樣叫 Database 了。

安裝 MongoDB

一樣先用 apt-get 安裝 MongoDB。

sudo apt-get install mongodb

操作 MongoDB Shell

在用 JS 操作前,我們先學會用 Mongo Shell 操作看看吧。輸入 mongo 進到 Mongo 的 Shell。

想要查看所有資料庫,可以使用這個指令:

show dbs;

一開始應該只會有兩個預設的資料庫:

admin 0.000GB
local 0.000GB

如果我們要使用一個新的資料庫的話,例如我們今天假設要建立一個部落格系統,要開一個新資料庫叫 blog,那可以直接使用這個指令:

use blog;

不需要管這個資料庫有沒有存在,只要不存在的話它會自動幫你建立。接著我們來試著新增一筆資料,假設我們要新增一個文章資料的話,那一樣我們需要一個 Collection 叫 articles,不需要特別建立,可以直接使用 insert 來新增一筆資料(document):

# db.collection.insert(新增內容);
db.articles.insert({
    title: '測試文章',
    body: '測試內容',
    time: new Date('2019-09-29 00:00:00'),
    author: 'NoobTW',
});

會回傳一個:

WriteResult({ "nInserted" : 1 });

代表我們成功寫入了一筆資料。

我們可以使用 find 來查資料:

# db.collection.find(查詢條件)
db.articles.find({});

中間的 {} 是不設查詢條件的意思,應該會看到一筆我們剛剛新增的資料:

{ "_id" : ObjectId("5d90a6d70002d2373bcb13b0"), "title" : "測試文章", "body" : "測試內容", "time" : ISODate("1970-01-01T00:00:00Z"), "author" : "NoobTW" }  

其中 _id 是 MongoDB 自動產生的 ID,每一筆資料(document)都會產生一個獨一無二的 ID。

如果要更新資料的話,例如我們要把標題「測試文章」這筆資料改成標題「測試標題」,那可以這樣下:

# db.collection.update(查詢條件, 新資料)
db.articles.update({title: '測試文章'}, {$set: {title: '測試標題'}});

前面是查詢條件(你在 find 也可以這樣下),後面是新資料內容,其中 $set 是只修改指定欄位的意思。如果你沒有加 $set 的話,這筆資料會只剩下 title 這個欄位,其他欄位都不見了。

最後如果是要刪除資料的話:

# db.collection.remove(查詢條件)
db.articles.remove({title: '測試文章});

這樣就能把標題為「測試文章」的所有資料都刪除掉。

這篇講了簡單的 Mongo Shell 的 CRUD 操作。由於官方文件說:

The mongo shell is an interactive JavaScript interface to MongoDB.
(Mongo shell 是一個存取 MongoDB 的互動 JavaScript 介面。)

換句話說,當你熟悉 Mongo Shell 以後,未來在 Node.js 上操作 MongoDB 也會相當熟練,畢竟語法大同小異。可以試著多開幾個不同的 Collection 操作看看,也可以去研究怎麼操作複雜的 Array,如搭配 $pushupdate、或使用 $andfind 等等,後面的文章會探討如何備份還原 MongoDB 資料庫,以及如何在 Node.js 上操作。

本篇文章同步發表在 iT邦幫忙

我們正降低廣告比例以提升閱讀體驗。如果你喜歡這篇文章,不妨按下 Like 按鈕分享到社群,以行動支持我寫更多文章。 當然,你也可以 點此用新臺幣支持我,或 點此透過 BTC、ETH、USDC 等加密貨幣支持我
分享到: