一、文檔的注意事項:
1. 索引值對是有序的,如:{ "name" : "stephen", "genda" : "male" } 不等於 { "genda" : "male", "name" : "stephen" }
2. 文檔資訊是大小寫敏感的,如:{ "name" : "stephen" } 不等於 { "Name" : "stephen" }
3. 文檔資訊是區分類型的,如:{ "age" : 30 } 不等於 { "age" : "30" }
4. 文檔中不能出現重複鍵,如:{ "name" : "stephen", "name" : "liu" }
二、使用多個集合的必要性:
1. 如果把各種模式的文檔存放在一個集合中,對於開發人員來說是非常災難的。因為在擷取到查詢結果之後,就需要手工編寫代碼過濾不同類型的文檔了。
2. 會使查詢效率降低。試想一下,假設某個模式的文檔的資料量相對較少,如果仍然將其放到一個通用的大集合中,其查詢效率勢必會大大低於將其放到獨立的集合中。
3. 在建立索引時,如果所有的文檔均為同一模式,那麼索引的利用率將會更加高效。
三、集合的命名注意事項:
1. 集合名不能是Null 字元串""。
2. 不要以system開頭,這一般是為系統保留的,如system.users集合中儲存了資料庫的使用者資訊,而system.namespace集合中保留了資料庫集合的資訊。
3. 不要在集合名裡麵包含'$'字元。
4. 子集合只是一種較好的集合規劃方式,如blog.posts和blog.anthurs,實際上它們和blog集合之間沒有任何關係,甚至blog集合可以不存在。
四、資料庫:
在同一個MongoDB伺服器中可以存在多個資料庫,每個不同的資料庫儲存在不同的檔案中。又由於資料庫名和檔案名稱是綁定的,因此資料庫名會有一些限制。
1. 不能是Null 字元""。
2. 全部小寫且不超過64位元組。
3. 不得含有檔案名稱命名中的非法字元。
4. admin資料庫是管理資料庫,如果某個使用者位於該資料庫中,他將自動繼承所有資料庫許可權。一些特定的伺服器命令也只能從這個資料庫運行。
5. local這個資料庫永遠不會被複製,只是用於儲存限於本地單台伺服器的任意集合。
6. 資料庫名.集合名,表示該集合的完全限定名,其長度不要超過121自己。
五:MongoDB的啟動:
1. 直接執行mongod即可,在沒有任何命令列參數的情況下,伺服器的主機中必須包含/data/db目錄,對於Windows而言,其預設目錄則為服務程式所在磁碟機的\data\db。如D盤,則為D:\data\bin。預設監聽連接埠為27017。
2. MongoDB內建了一個JavaScript Shell,可以從命令列與MongoDB互動。如:mongo。這個Shell工具可以直接執行簡單的數學運算。如:
> x = 200
200
> x /5
40
--還可以調用JavaScript的標準庫。
> new Date("2012/05/05")
ISODate("2012-05-04T16:00:00Z")
> "Hello World".replace("World", "MongoDB")
Hello MongoDB
--定義和調用自訂的JavaScript函數。
> function factorial(n) {
... if (n <= 1) return 1
... return n * factorial(n - 1)
... }
> factorial(5)
120
3. 在Shell用戶端插入MongoDB的文檔,如:
> post = { "title" : "my blog post", "content" : "Here's my blog", "date" : new Date() }
{
"title" : "my blog post",
"content" : "Here's my blog",
"date" : ISODate("2012-06-04T07:38:51.345Z")
}
> db.blog.insert(post)
> db.blog.find()
{ "_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"), "title" : "my blog post", "content" : "Here's my blog",
"date" : ISODate("2012-06-04T07:38:51.345Z") }
4. 在Shell用戶端查詢文檔,如:
> db.blog.findOne()
{
"_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"),
"title" : "my blog post",
"content" : "Here's my blog",
"date" : ISODate("2012-06-04T07:38:51.345Z")
}
5. 在Shell中更新文檔,如:
--需要先更新post變數的內容,即先增加了一個comments的鍵,其值為空白數組。
> post.comments = []
[ ]
--update的第一個參數是條件,第二個參數是待更新的值。
> db.blog.update({ "title" : "my blog post"}, post)
> db.blog.findOne()
{
"_id" : ObjectId("4fcc661de4bcbac15b3d9e3a"),
"title" : "my blog post",
"content" : "Here's my blog",
"date" : ISODate("2012-06-04T07:38:51.345Z"),
"comments" : [ ]
}
6. 在Shell用戶端中刪除,如:
--如果remove中沒有條件,則清除集合中的全部資料。
> db.blog.remove( { title:"my blog post"})
> db.blog.findOne()
null
六、Shell的使用小技巧:
> show dbs --顯示資料庫名。
> show collections --顯示集合名
> show users --顯示使用者名稱
> db.help() --列出資料庫的方法。
> db.blog.help() --列出blog集合上的方法。
> db.blog.update --可以直接看update方法的JavaScript實現代碼。