Icon_MongoDB_by_xkneo

Mongo DB 工程師的香蕉芒果

這個標題的梗請參照這個連結,俺就不用多說。工程師平日忙於工作與電腦會很少三餐均衡,為了要提醒我們多吃水果,所以,不知道梗是啥的英文語系國家就偏偏把這個水果代號附加上自家的產品(例:微軟的智慧手機 Windows Phone Mango 7 )。芒果的英文叫做 Mango 而日文叫做 マンコ (日文意思請參考這個連結),所以這個 MongoDB 的取名應該是故意的吧!!XD

Mongo DB 是個目前所NoSQL大推的文檔式資料庫也是非關聯式的資料庫,為何需要用到文檔式的資料庫?跟關聯式的資料庫又是有什麼差別?

非關聯資料庫的出現不是為了取代關聯資料庫。具體的說,MongoDB 並不支援複雜的事務,只支援少量的原子操作,所以不適用於“轉帳”等對事務和一致性要求很高的場合。所以純粹是只做成消息發佈、留言板、計數器這一類的App就不必使用MySQL那樣大材小用。

Ubuntu的t安裝方式可以參考這裡

安裝過程很簡單,完成之後下指令mongo即可進入shell模式跟它玩玩。
[cc lang=”bash”]
$ mongo
MongoDB shell version: 1.8.2
connecting to: test
[/cc]

輸入help之後有以下部分的指令可供招喚
[cc lang=”bash”]
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
rs.help() help on replica set methods
help connect connecting to a db help
help admin administrative help
help misc misc things to know
help mr mapreduce help

show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
use set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
[/cc]

先用這個指令讓它拾起test這個資料庫
[cc lang=”bash”]
> use test
switched to db test
[/cc]

將資料填入資料庫
[cc lang=”bash”]
>db.foo.save({a:1})
>db.foo.save({a:2})
>db.foo.save({a:3})
>db.foo.save({a:”abc”})
>db.foo.save({a:”def”})
>db.foo.save({a:”ghi”})
……
……
[/cc]

列出所有剛輸入過的資料
[cc lang=”bash”]
> db.foo.find()
{ “_id” : ObjectId(“4e3ba890b9c942b2be856d09”), “a” : 1 }
{ “_id” : ObjectId(“4e3ba892b9c942b2be856d0a”), “a” : 2 }
{ “_id” : ObjectId(“4e3ba894b9c942b2be856d0b”), “a” : 3 }
{ “_id” : ObjectId(“4e3ba897b9c942b2be856d0c”), “a” : 4 }
{ “_id” : ObjectId(“4e3ba89ab9c942b2be856d0d”), “a” : 5 }
{ “_id” : ObjectId(“4e3ba8d3b9c942b2be856d0e”), “a” : “abc” }
{ “_id” : ObjectId(“4e3ba8d7b9c942b2be856d0f”), “a” : “def” }
{ “_id” : ObjectId(“4e3ba8dcb9c942b2be856d10”), “a” : “ghi” }
{ “_id” : ObjectId(“4e3ba8e0b9c942b2be856d11”), “a” : “jkl” }
[/cc]

檢視所有資料庫的狀態
[cc lang=”bash”]
> show dbs
admin (empty)
local (empty)
test 0.0625GB
[/cc]

輸入多欄位的資料
[cc lang=”bash”]
> db.foo.save({name:”michael”,email:”abc@abc.com”,birthday:”1991/01/01″})
> db.foo.save({name:”anna”,email:”abc@abc.com”,birthday:”1991/01/01″})
> db.foo.save({name:”ally”,email:”abc@abc.com”,birthday:”1991/01/01″})
> db.foo.save({name:”charse”,email:”abc@abc.com”,birthday:”1991/01/01″})
[/cc]
再列出所有資料
[cc lang=”bash”]
> bd.foo.find()
{ “_id” : ObjectId(“4e3ba890b9c942b2be856d09”), “a” : 1 }
{ “_id” : ObjectId(“4e3ba892b9c942b2be856d0a”), “a” : 2 }
{ “_id” : ObjectId(“4e3ba894b9c942b2be856d0b”), “a” : 3 }
{ “_id” : ObjectId(“4e3ba897b9c942b2be856d0c”), “a” : 4 }
{ “_id” : ObjectId(“4e3ba89ab9c942b2be856d0d”), “a” : 5 }
{ “_id” : ObjectId(“4e3ba8d3b9c942b2be856d0e”), “a” : “abc” }
{ “_id” : ObjectId(“4e3ba8d7b9c942b2be856d0f”), “a” : “def” }
{ “_id” : ObjectId(“4e3ba8dcb9c942b2be856d10”), “a” : “ghi” }
{ “_id” : ObjectId(“4e3ba8e0b9c942b2be856d11”), “a” : “jkl” }
{ “_id” : ObjectId(“4e3babccb9c942b2be856d12”), “a” : “ghi” }
{ “_id” : ObjectId(“4e3babf9b9c942b2be856d13”), “name” : “michael” }
{ “_id” : ObjectId(“4e3bacc8b9c942b2be856d14”), “name” : “john” }
{ “_id” : ObjectId(“4e3bad29b9c942b2be856d15”), “name” : “john”, “email” : “abc@abc.com”, “birthday” : “1981/01/01” }
{ “_id” : ObjectId(“4e3badd3b9c942b2be856d16”), “name” : “anna”, “email” : “abc@abc.com”, “birthday” : “1991/01/01” }
{ “_id” : ObjectId(“4e3bae98b9c942b2be856d17”), “name” : “ally”, “email” : “abc@abc.com”, “birthday” : “1991/01/01” }
{ “_id” : ObjectId(“4e3baea7b9c942b2be856d18”), “name” : “charse”, “email” : “abc@abc.com”, “birthday” : “1991/01/01″ }
[/cc]
尋找如同 SELECT * FROM test where email=’abc@abc.com’
[cc lang=”bash”]
> db.foo.find({email:”abc@abc.com”}).forEach(printjson)
{
“_id” : ObjectId(“4e3bad29b9c942b2be856d15”),
“name” : “john”,
“email” : “abc@abc.com”,
“birthday” : “1981/01/01”
}
{
“_id” : ObjectId(“4e3badd3b9c942b2be856d16”),
“name” : “anna”,
“email” : “abc@abc.com”,
“birthday” : “1991/01/01”
}
{
“_id” : ObjectId(“4e3bae98b9c942b2be856d17”),
“name” : “ally”,
“email” : “abc@abc.com”,
“birthday” : “1991/01/01”
}
{
“_id” : ObjectId(“4e3baea7b9c942b2be856d18”),
“name” : “charse”,
“email” : “abc@abc.com”,
“birthday” : “1991/01/01″
}
[/cc]

一樣用以上的方法,但不用JSON的方式排版
[cc lang=”bash”]
> db.foo.find({email:”abc@abc.com”})
{ “_id” : ObjectId(“4e3bad29b9c942b2be856d15”), “name” : “john”, “email” : “abc@abc.com”, “birthday” : “1981/01/01” }
{ “_id” : ObjectId(“4e3badd3b9c942b2be856d16”), “name” : “anna”, “email” : “abc@abc.com”, “birthday” : “1991/01/01” }
{ “_id” : ObjectId(“4e3bae98b9c942b2be856d17”), “name” : “ally”, “email” : “abc@abc.com”, “birthday” : “1991/01/01” }
{ “_id” : ObjectId(“4e3baea7b9c942b2be856d18”), “name” : “charse”, “email” : “abc@abc.com”, “birthday” : “1991/01/01” }
[/cc]

Mongo DB的使用如同在寫Ruby on Rails那樣的熟悉,所以很受許多同好使用,而且線上的文件也很充足,入門沒有難事,而我最在行的就是使用PHP,好消息的它對於任何的語言的連結都很好使用,一個新興的資料庫能在短時間內突破MySQL之後的SQLite3,果然是匹DB界的黑馬 ~

Related Posts Plugin for WordPress, Blogger...

Leave a Reply