1. 程式人生 > >MONGODB學習筆記一:入門

MONGODB學習筆記一:入門

文件:多個鍵及其關聯的值『有序』地放置在一起。
{"greeting" : "Hello, world!", "foo" : 3}
集合:一組文件。集合是無模式的,下面兩個文件可以存在於同一個集合裡面:
{"greeting" : "Hello, world!"}
{"foo" : 5}
集合的命名規則:
(1)集合名不能使空字串""。
(2)集合名不能含有\0字元(空字元),這個字元表示集合名的結尾。
(3)集合名不能以"system."開頭,這是為系統集合保留的字首。例如system.users這個儲存著資料庫的使用者資訊,system.namespaces集合儲存著所有資料庫集合的資訊。
(4)使用者建立的集合名字不能含有保留字元$。
子集合按“.”字元劃分。例如,一個帶有部落格功能的應用肯呢個包含兩個集合,分別是blog.posts和blog.authors。這樣做的目的是為了使組織結構更好些,雖然blog這個集合和他的子集合沒有任何關係。
資料庫:多個集合。
MongoDB中多個文件組成集合,多個集合組成資料庫。
資料庫的命名規則:資料庫名可以是滿足以下條件的任意UTF-8字串。
(1)不能是空字串("")。
(2)不得含有' '(空格)、.、$、/、\和\0(空字元)。
(3)應全部小寫。
(4)最多64位元組。
因為 資料庫名最終會程式設計檔案系統裡的檔案。
保留的特殊資料庫名:
admin:從許可權的角度看,這是“root”資料庫。如果將一個使用者新增到這個資料庫,這個使用者自動繼承所有資料庫的許可權。
local:這個資料永遠不會被複制,可以用來儲存限於本地單臺伺服器的集合。
config:當Mongo用於分片設定時,config資料庫在內部使用,用於包UC你分片的相關資訊。
名稱空間 = 資料庫名.集合名 
例如,如果你在cms資料庫中使用blog.posts集合,那麼這個集合的名稱空間就是cms.blog.posts。
啟動MongoDB:
Linux: $ ./mongod
Windows:$ mongod.exe
mongod預設資料目錄/data/db(windows下C:\data\db\),預設埠27017。建立資料目錄(比如mkdir -p /data/db),並確保對該目錄有些許可權是很重要的。
mongod還會在埠28017啟動一個非常基本的HTTP伺服器,可以通過瀏覽器訪問http://localhost:28017來獲取資料庫的管理資訊。
MongoDB shell:MongoDB自帶一個JavaScript shell,可以從命令列與mongoDB例項互動。
執行mongo啟動shell:
$ ./mongo 
shell會在啟動時自動連線MongoDB伺服器,所以要確保在使用shell之前啟動mongod。
shell是功能完備的JavaScript直譯器,可以執行任何JavaScripe程式。
shell是一個獨立的MongoDB客戶端。開啟的時候,shell會連到MongoDB伺服器的test資料庫,並將這個資料庫連線賦值給全域性變數db。這個變數是通過shell訪問MongoDB的主要入口點。
shell還有些非JavaScript語法的擴充套件,是為了方便習慣於SQL shell的使用者而新增的。例如,最重要的操作就是選擇要使用的資料庫:
> use foobar
switched to db foobar
現在如果看看db,會發現其指向foobar資料庫:
> dbfoobar
可以通過db變數訪問其中的集合。例如db.baz返回當前資料庫的baz集合。

『shell中的基本操作』:建立、讀取、更新和刪除(CRUD)。
1.建立
例:假設要儲存一篇部落格文章。首先,建立一個區域性變數post,內容是代表文件的JavaScript物件。裡面會有"title","content"和"date"(發表日期)幾個鍵。
> post = {"title" : "My Blog Post",
"content" : "Here's my blog post.",
"date" : new Date()}
這個物件是個有效的MongoDB文件,所以可以用insert方法將其儲存到blog集合中:
> db.blog.insert(post)
可以呼叫find方法來檢視:
> db.blog.find()
2.讀取
find會返回集合裡面所有的文件。若只是想檢視一個文件,可以用findOne:
> db.blog.findOne()
3.更新
例:第一步修改變數post,增減"comments"鍵:
> post.comments = []
然後執行update操作,用新版本的文件替換標題為"My Blog Post"的文章:
> db.blog.update({title : "My Blog Post"}, post)
文件此時已經有了"comments"鍵,可以再用find檢視一下:
> db.blog.find()
4.刪除
remove用來從資料庫中永久性地刪除文件。在不使用引數進行呼叫的情況下,它會刪除一個集合內的所有文件。他也可以接受一個文件以指定限定條件。例如,下面的命令會刪除我們剛剛穿件的文章:
> db.blog.remove({title : "My Blog Post"})

使用shell的竅門
> help
使用db.help()可以檢視資料庫級別的命令的幫助;
使用db.foo.help()可以檢視集合的相關幫助。
在輸入函式的時候不要輸括號,會顯示該函式的JavaScript原始碼。如:
> db.foo.update 
要檢視shell提供的所有自動生成的JavaScript函式API文件,可訪問http://api.mongodb.org/js/

MongoDb的資料型別:
· null
null用於表示空值或者不存在的欄位。
{"x" : null}
· 布林
布林型別有兩個值'true'和'false'
{"x" : true}
· 32位整數
shell中這個型別不可用。JavaScript僅支援64位浮點數,所以32位整數會被自動轉換。
· 64位整數
shell也不支援這個型別。shell會使用一個特殊的內嵌文件來顯示64位整數。
· 64位浮點數
shell中的數字都是這種型別。下面是一個浮點數:
{"x" : 3.14}
這個也是浮點數:
{"x" : 3}
· 字串
UTF-8字串都可以表示為字串型別的資料:
{"x" : "foobar"}
· 符號
shell不支援這種型別。shell將資料庫裡的符號型別轉換成字串。
· 物件id
物件id是文件的12位元組的唯一ID。
{"x" : ObjectId()}
· 日期
日期型別儲存的是從標準紀元開始的毫秒數。不儲存時區:
{"x" : new Date()}
· 正則表示式
文件中可以包含正則表示式,採用JavaScript的正則表示式語法:
{"x" : /foobar/i}
· 程式碼
文件中還可以包含JavaScript程式碼:
{"x" : function() { /* ... */ }}
· 二進位制資料
二進位制資料可以由任意位元組的串組成。不過shell中無法使用。
· 最大值
BSON包括一個特殊型別,表示可能的最大值。shell中沒有這個型別。
· 最小值
BSON包括一個特殊型別,表示可能的最小值。shell中沒有這個型別。
· 未定義
文件中也可以使用未定義型別(JavaScript中null和undefined是不同的型別)。
{"x" : undefined}
· 陣列
值得集合或列表可以表示成陣列:
{"x" : ["a", "b", "c"]}
· 內嵌文件
文件可以包含別的文件,也可以作為值嵌入到父文件中:
{"x" : {"foo" : "bar"}}