iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Software Development

MongoDB披荊斬棘之路系列 第 4

DAY4 MongoDB 資料庫與 Collection

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 即可,以下為範例:

test> show dbs
admin     41 kB
config   111 kB
local   73.7 kB
test> use testUsedDatabase
switched to db testUsedDatabase

直接使用 use testUsedDatabase 就會切換到當下資料庫。

Collection

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
}
])

結果如圖:

https://ithelp.ithome.com.tw/upload/images/20210904/20140504tKcbNGfa2b.png

建立 Collection

建立一般 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。

Capped collection

MongoDB 另一個強大的 collection 類別,叫做 capped collection。這種類型有幾個特點:

  1. 必須先宣告才能使用
  2. 宣告時必須指定大小,且不允許更改
  3. 裡面的資料無法單獨修改,要,就只能全部刪除重來
  4. 無需 Index,但速度堪比有加上 index 的一般 collection
  5. 因為固定大小的緣故,當資料筆數滿時,會優先覆蓋最早寫入的資料
  • 確認是否為 capped collection
db.getCollection('test-collection').isCapped()
  • 建立 capped collection,size 單位為 byte; max 是最多幾筆資料的意思
db.createCollection( "test-capped.collection", { capped:true, size:1024*1024 , max:100 } )

Views

MongoDB 的 views 很像是某些老牌資料庫的簡易版,我在這邊不打算講得太詳細,因為個人認為在大部分情況下比較少需要使用到。可以想像它就是一個 method,可以自幾定義參數,經過查詢後返回結果。

特色

  • 只能查詢
  • 可以使用 aggregation pipeline
  • 可以使用 $merge 產生結果到別的資料庫或 collection
  • 實時查詢,並不會建立或快取任何結果,因此沒有效能上提升

使用場景

  • 簡化你的查詢語法
  • 提供給較少權限或者特定權限的使用者查詢

關於 MongoDB Views 我暫時想不到別的了,如果很落實權限設計,應該也不會讓特定使用者直接查到資料庫才是。


本系列文章會同步發表於我個人的部落格 Pie Note


上一篇
DAY3 MongoDB 連線與 IDE
下一篇
DAY5 MongoDB 資料型別與 _id
系列文
MongoDB披荊斬棘之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言