iT邦幫忙

DAY 16
0

練習如何去開發一個通訊軟體 Boo it!系列 第 16

Day16 - MongoDB ‧ 資料儲存的百寶箱!

  • 分享至 

  • xImage
  •  

MongoDB 是一個開源文件資料庫。使用的是NoSQL資料庫概念。

NoSQL (Not only SQL) 針對於傳統資料庫系統有不一樣的做法來因應資料量的巨量成長,因此,有 "資料表可延伸性" , "自由長度欄位" ,"分散式" ,"大容量" ,"資料一致性" 的特性存在。並不是說NoSQL就一定比傳統資料庫管理系統還要好。針對不同的應用使用適合的資料庫管理系統才是最棒的做法。

如上述所提,MongoDB使用的是文件導向(Document-Oriented) 的儲存概念(Storage)。在概念上,使用的是JSON / BSON 儲存、讀取每筆資料。因為符合NoSQL的特性。所以,其資料庫也可以同時存在不同tuple長度的資料表。

至於為何使用BSON(Binary Json)格式來存取資料,就必須提及在儲存資料在MongoDB資料表時候,因為資料可以快速的加解密以及儲存資料的方便(不同 data type 皆視為binary json處理),因此使用BSON即可達到上述目的。

根據官方網站的安裝說明:

  1. 先加入public key 到套件管理系統。

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

  2. 重新reload並且更新apt

    sudo apt-get update

  3. 安裝MondgoDB (當然官方有教學可以安裝特定版本 請點我)

    sudo apt-get install -y mongodb-org

  4. 安裝完之後 預設是自動開機啟動。那我們要來測試基本指令。

首先就是 啟動 停止 以及 重啟

sudo service mongod start

sudo service mongod stop

sudo service mongod restart
  1. 注意,基本上一開始安裝是預設開機啟動。但如果沒有開機啟動(例如: koding 有安裝), 但是沒有預設目錄,我們就必須要手動設定以及啟動。(這裡非常感謝 AndyYou's Blog 的教學,這次他也有參加IT鐵人競賽,文章也是相當的精彩!)

// MongoDB 預設資料庫目錄存於/data/db ,如果沒有預設建立就必須手動創造

mkdir -p /data/db

// 更改目錄權限

chown id -u /data/db

// 啟動mongoDB

mongod
  1. 當服務啟動,就可以使用 mongo 指令來進入操作資料庫。

    mongo

預設上是會以test當作臨時資料庫。我們可以使用test資料庫,或者是另外創建一個資料庫來進行操作。由於上述所提及的資料表可延展性以及自由欄位長度。我們可以直接進入一個新的資料庫(進入的同時即會同時創建資料庫),這裡假設名稱為:yourDB。

use yourDB 
  1. 當進入資料庫的時候,我們可以直接建立測試資料。格式皆為JSON。

    test1={"user":"sam"}

    test2={"user":"merry","age":13}

上述所提及兩筆資料,欄位長度不同但是卻可以存在同一資料表(collection)下。

我們用以下指令寫入資料庫的 people 資料表下。

db.people.insert(test1)

db.people.insert(test2)
  1. 當然,輸入完之後我們可以使用find()指令來查看資料表的內容。

    db.people.find()

會看到以下畫面

{ "_id" : ObjectId("tc2509f9f3d24d31102bdqq4"), "user" : "sam" }

{ "_id" : ObjectId("tc2509fef3d24d31102bdqq4"), "user" : "merry", "age" : 13 }

  1. 那大致上就已經完成基本的設定以及資料庫、資料表的內容。接下來就是要加入測試資料。

預設我們的資料庫為Boo , 資料表為accounts ,欲新增10筆資料 (因前面已經增加兩筆,所以變數從3開始)

可使用JavaScript 語法

for(i=3; i<=10; i++) { var a = "test" + i; var b = "test" + i + "_p"; db.accounts.insert({"username" : a, "password" : b}) }

成功會顯示如下:

  1. 加入測試資料之後,我們就可以看到,我們建立了一個資料庫(db)稱為Boo,然而資料表(Collections)叫做accounts,接著有10筆帳戶資料。(當然,這邊沒有做密碼加密,只是做個簡單的測試)

  2. 修改欄位。接下來我們要來做修改的動作,如果有資料錯誤我們可以透過Update指令來幫助我們修改資料。但這邊有一點必須注意, mongoDB一開始的Update 是更新所有欄位。

換句話說假設我們有A,B,C 欄位,我們欲更新C欄位資料,就必須指定C欄位的值才可以。如果沒有則會更新成C欄位(A,B欄位會消失!!!)。

狀況如下: (假設我們要修改test3的密碼為test333)

照Update語法理應上是

db.accounts.update({username:”test3”} , {password:”test333”})

好! 我們來看一下更新情形!使用find()指令

發現! 其他欄位怎麼不見了!? ,因為你告訴mongoDB 我要將username以及password 更新成 只有 password欄位(如果沒有欄位存在,則會變成新增)。

所以,如果只是要更新欄位資料,就必須指定欄位值:

前面加入$set: {<欲修改欄位>}

因此,我們可以看到更新(修改資料)完成,也可以了解到他新增,刪除皆可以靠Update來完成的便利性。(前提是使用上要小心點,避免刪除欄位或者是修改到欄位)

當然,也有$unset:移除欄位,$inc:欄位加值 等等指令存在。這個可以在mongoDB 官網上查詢使用方式。


好的那假設今天我們要來新增朋友名單,關係圖如下:

那我們可以藉由下列指令來幫助我們建構這個關係

可以看到在mongoDB中資料表為下:

好的,那我們就已經完成Boo it 最基本的帳戶資料以及朋友名單。這裡先不考慮密碼加密問題!只是做簡單的建立資料庫內容。

參考資料來源:

非常感謝這些網站的作者們寫的筆記。

Andy作者這次也有參加鐵人比賽,寫的文章很精彩!

http://andyyou.logdown.com/posts/177570-mongodb-notes

這裡有從SQL轉換到MongoDB的語法 (如果你有語法上使用的問題可參考)

http://calvert.logdown.com/posts/159792-sql-to-mongodb-mapping-chart


上一篇
Day15 - HAML ! 寫份HTML文件邁向藝術的境界
下一篇
Day 17 – Sinatra 與MongoDB的約會!
系列文
練習如何去開發一個通訊軟體 Boo it!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
justinsanity
iT邦新手 4 級 ‧ 2014-10-15 19:20:28

補充說明:

根據 reference:db.collection.update(query, update, options)
我們上面寫:db.accounts.update({username:”test3”} , {password:”test333”})
意思是『檢索 username 為 test3 的那筆條目』,將其內容更新為『(只)含 password 這個欄位且其值為 test333』

我要留言

立即登入留言