1. 程式人生 > >MongoDB學習筆記1(入門)

MongoDB學習筆記1(入門)

一、文件的注意事項
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.  集合名不能是空字串""。
2.  不要以system開頭,這一般是為系統保留的,如system.users集合中儲存了資料庫的使用者資訊,而system.namespace集合中保留了資料庫集合的資訊。
3.  不要在集合名裡面包含'$'字元。
4.  子集合只是一種較好的集合規劃方式,如blog.posts和blog.anthurs,實際上它們和blog集合之間沒有任何關係,甚至blog集合可以不存在。

四、資料庫:
在同一個MongoDB伺服器中可以存在多個數據庫,每個不同的資料庫儲存在不同的檔案中。又由於資料庫名和檔名是繫結的,因此資料庫名會有一些限制。
1.  不能是空字元""。
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實現程式碼。