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
即可,以下為範例:
test> show dbs
admin 41 kB
config 111 kB
local 73.7 kB
test> use testUsedDatabase
switched to db testUsedDatabase
直接使用 use testUsedDatabase
就會切換到當下資料庫。
Collection 就相當於 RDBMS 內的資料表(table)的概念,只是它存放的是文件(document)而非固定大小、格式的資料(record),例如:
//Record1
{
"_id": "customized_id1",
"fieldA": "valueA"
},
//Record2
{
"_id": "customized_id2",
"fieldA": "valueA",
"fieldB": 105,
"fieldC": 3.1415
}
這樣的兩筆一樣可以直接寫入 DB 喔!
db.getCollection('test-collection').insertMany([
{
"_id": "customized_id1",
"fieldA": "valueA"
},
{
"_id": "customized_id2",
"fieldA": "valueA",
"fieldB": 105,
"fieldC": 3.1415
}
])
結果如圖:
建立一般 Collection 不需要特別宣告,直接寫入任意資料即可,以下為範例:
local> show dbs
admin 41 kB
config 111 kB
local 73.7 kB
local> use testUsedDatabase
switched to db testUsedDatabase
testUsedDatabase> show collections
testUsedDatabase> db.getCollection('autoCreatedCollection').insertOne({"field": "hi"})
{
acknowledged: true,
insertedId: ObjectId("612cf44a031915cb2af17374")
}
testUsedDatabase> show collections
autoCreatedCollection
直接 insert 資料就會建立你指定的 collection。
MongoDB 另一個強大的 collection 類別,叫做 capped collection
。這種類型有幾個特點:
db.getCollection('test-collection').isCapped()
size
單位為 byte; max
是最多幾筆資料的意思db.createCollection( "test-capped.collection", { capped:true, size:1024*1024 , max:100 } )
MongoDB 的 views 很像是某些老牌資料庫的簡易版,我在這邊不打算講得太詳細,因為個人認為在大部分情況下比較少需要使用到。可以想像它就是一個 method,可以自幾定義參數,經過查詢後返回結果。
關於 MongoDB Views 我暫時想不到別的了,如果很落實權限設計,應該也不會讓特定使用者直接查到資料庫才是。
本系列文章會同步發表於我個人的部落格 Pie Note