DAY4 MongoDB 資料庫與 Collection
Database
MongoDB 一個 instance 中可以有很多資料庫,預設的有三個,admin, config, local
。當我們連進 MongoDB 後,輸入 show dbs
就可以看到這三個,這三個分別有其用處。
admin:
看這個名字可以想見這個資料庫很重要,對的,所有的重要資訊、重要指令都只能在這個資料庫底下操作。例如要新增角色或者關閉 instance,相當於所有資料庫的 administrator 一般。如果要建立個別資料庫的使用者或角色,在各別的資料庫建立即可,但如果想要跨資料庫,則需要在這裡建立,這樣會自動繼承到其他資料庫。
config:
此資料庫主要是存放 sharding 相關的資訊。在 3.6 版後,開始存放 standalone 或 replication 的資料,也有跟 transaction 相關的資料,但無論如何是禁止去針對這個資料庫進行修改或刪除的,僅有查看可以。local:
用來存放這個 instance,在這台機器的檔案與資訊,不會因為 replica set 的設定而把相關資料複製走,簡單來說就是別人用不到的資訊。連進去就有一個 startup_log 可以查看。
建立資料庫
建立資料庫並不需要特別宣告,直接 use
即可,以下為範例:
1 | test> show dbs |
直接使用 use testUsedDatabase
就會切換到當下資料庫。
Collection
Collection 就相當於 RDBMS 內的資料表(table)的概念,只是它存放的是文件(document)而非固定大小、格式的資料(record),例如:
1 | //Record1 |
這樣的兩筆一樣可以直接寫入 DB 喔!
1 | db.getCollection('test-collection').insertMany([ |
結果如圖:
建立 Collection
建立一般 Collection 不需要特別宣告,直接寫入任意資料即可,以下為範例:
1 | local> show dbs |
直接 insert 資料就會建立你指定的 collection。
Capped collection
MongoDB 另一個強大的 collection 類別,叫做 capped collection
。這種類型有幾個特點:
- 必須先宣告才能使用
- 宣告時必須指定大小,且不允許更改
- 裡面的資料無法單獨修改,要,就只能全部刪除重來
- 無需 Index,但速度堪比有加上 index 的一般 collection
- 因為固定大小的緣故,當資料筆數滿時,會優先覆蓋最早寫入的資料
- 確認是否為 capped collection
1 | db.getCollection('test-collection').isCapped() |
- 建立 capped collection,
size
單位為 byte;max
是最多幾筆資料的意思
1 | db.createCollection( "test-capped.collection", { capped:true, size:1024*1024 , max:100 } ) |
Views
MongoDB 的 views 很像是某些老牌資料庫的簡易版,我在這邊不打算講得太詳細,因為個人認為在大部分情況下比較少需要使用到。可以想像它就是一個 method,可以自幾定義參數,經過查詢後返回結果。
特色
- 只能查詢
- 可以使用 aggregation pipeline
- 可以使用 $merge 產生結果到別的資料庫或 collection
- 實時查詢,並不會建立或快取任何結果,因此沒有效能上提升
使用場景
- 簡化你的查詢語法
- 提供給較少權限或者特定權限的使用者查詢
關於 MongoDB Views 我暫時想不到別的了,如果很落實權限設計,應該也不會讓特定使用者直接查到資料庫才是。