MongoDB 是個開源的 NoSQL 資料庫,由於你不需要花很多時間先制定每張資料表要長怎樣、畫出 ER Model,因此不管是用來做 Side-project,還是用來塞大量資料都很適合。
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 了。
一樣先用 apt-get 安裝 MongoDB。
sudo apt-get install mongodb
在用 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,如搭配 $push
來 update
、或使用 $and
來 find
等等,後面的文章會探討如何備份還原 MongoDB 資料庫,以及如何在 Node.js 上操作。
本篇文章同步發表在 Noob's Space。