MongoDB入門上

來源:互聯網
上載者:User

MongoDB基本概念

1.文檔是MongoDB中資料的基本單元,類似於關係型資料庫的行(但比行複雜的多)

2.集合可以看成沒有模式的表

3.MongoDB的單個執行個體可以容納多個獨立的資料庫,每一個都有自己的集合和許可權

4.MongoDB內建簡潔但功能強大的javascript shell,這個工具對於管理MongoDB執行個體和操作資料非常有用

5.每一個文檔都有一個特殊的鍵"_id",它在文檔所處的集合中是唯一的.

詳細介紹:

a)文檔

文檔是MongoDB的核心概念.多個鍵及其關聯的值有序的放置在一起便是文檔.

大多數語言都有想通的一種資料結構,比如:映射,散列或字典.在javascript裡面,文檔表示為對象:

{"greeting":"Hello world","age":30}

這個文檔只有一個鍵"greeting",其對應的值為"Hello world".絕大數情況下,文檔會比這複雜的多,

經常會包含多個索引值對:

{"greeting":"Hello world","Hello":"Refactor"}

文檔中的索引值對是有序的,上面的文檔與下面的文檔是不同的:

{"Hello":"Refactor","greeting":"Hello world"}

文檔中的值可以是字串,也可以是其他幾種資料類型.如例子中的"age"的值是整數

文檔中的鍵是字串,除了少數例外的情況下,鍵可以是任意utf-8字元

鍵不能含有\0(Null 字元),這個字元表示鍵的結尾

.和$只有在特定的環境下才能使用,使用不當的話,驅動程式會提示

底線"_"開頭的鍵是保留的,雖然這個並不是嚴格要求的

MongoDB不但區分類型,也區分大小寫,下面兩個文檔是不同的:

{"age":"30"}

{"age":30}

一下文檔也是不同的:

{"age":30}

{"Age":30}

MongoDB文檔不能有重複鍵

{"Hello":"Hello world","Hello":"Refactor"}這是不正確的

 

b)集合

集合是一組文檔,如果說文檔相當於關係型資料庫中的行,那麼集合相當於表

集合是無模式的,這意味著一個集合裡面的文檔可以是各種各樣的,下面兩個文檔可以存在同一個集合中:

{"Hello":"Refactor"}

{"Age":30}

注意,上面的文檔不光是值的類型不同(字串和整數),他們的鍵也是不一樣的.因為集合裡面可以放置任何文檔,

那麼就有一個問題:還有必要使用多個集合嗎?要是沒必要對各種文檔劃分模式,那麼為什麼還要使用多個結合呢?

理由如下:

1.把各種各樣的文檔都混在一個集合裡面,開發人員要麼確保每次查詢只返回需要的文檔種類,要麼讓執行查詢的

應用程式來處理所有不同類型的文檔.如:查詢部落格文章,還要剔除那麼包含有作者資料的文檔

2.在一個集合裡面查詢特定類型的文檔在速度上不划算,分開做多個集合要快的多.如:集合裡面有個標註類型的鍵

要查詢其值為"Refactor1","Refactor2"或"Refactor3"的文檔,就會很慢,如果按照名字分割成3個集合的話,查詢會

快的多(參見"子集合")

3.把同種類型的文檔放在一個集合裡,這樣資料很集中.從只含有部落格文章的集合裡面查詢幾篇文章,會比從含有文章

和作者資料的集合裡面查幾篇文章少消耗磁碟尋道操作.

4.當建立索引的時候,文檔會有附加的結構(尤其是有唯一索引的時候).索引是按照集合來定義的.把同種類型的文檔

放在同一個集合裡面.使索引更有效.

 

集合名為滿足下列條件的utf-8字串

1.集合名不能是Null 字元串""

2.集合名不能含有\0Null 字元,這個字元表示集合名的結尾

3.集合名不能以"system."開頭,這是為系統集合保留的首碼.如:system.users這個集合儲存著資料庫的使用者資訊

system.namespaces集合儲存著所有資料庫集合的資訊.

4.集合名不能包含保留字元"$"

 

子集合

組織集合的一種慣例是使用"."字元分開的按命名空間劃分的子集合.如:一個帶有部落格功能的應用可能包含兩個集合,

分別是blog.posts和blog.authors.這樣做的目的是為了使組織圖更好些,也就是說blog這個集合(可能根本就不存在)

及其子集合沒有任何關係.

很多MongoDB工具中都包含子集合

1.GridFS是一種儲存大檔案的協議,使用子集合來隱藏檔的中繼資料,這樣就與內容塊分開了

2.MongoDB的web控制台通過子集合的方式將資料群組織在DBTOP部分

3.資料庫shell裡面,db.blog代表blog集合,db.blog.posts代表blog.posts集合

在MongoDB中使用子集合是組織資料的最好方法.

 

c)資料庫

MongoDB中多個文檔組成集合,同樣多個集合組成資料庫.一個MongoDB執行個體可以有多個資料庫,

它們之間可視為完全獨立的.每個資料庫都有獨立的許可權控制,即便是在磁碟上,不同的資料庫也放置

在不同的檔案中.將一個應用的所有資料存放區在同一個資料庫中.

和集合一樣,資料庫也通過名字來標識,資料庫名必須滿足如下條件的utf-8字元:

1.不能是Null 字元串("")

2.不能含有''(空格),.,$,/,\和\0(Null 字元)

3.應全部小寫

4.最多64位元組

之所以有這麼限制,是因為資料庫名最終會變成檔案系統裡的檔案.

有些資料庫名是保留的,可以直接存取這些有特殊作用的資料庫,如:

1.admin

從許可權的角度看,這是"root"資料庫.要是將一個使用者添加到這個資料庫,這個使用者自動繼承所有資料庫的許可權.

一些特定的伺服器端命令也只能從這個資料庫運行,如:列出所有的資料庫或者關閉伺服器

2.local

這個資料庫不會被複製,可以用來儲存限於本地單台伺服器的任意集合

3.config

當MongoDB用於分區設定時,config資料庫在內部使用,用於儲存分區的相關資訊.

 

把資料庫的名字放在集合名前,得到就是集合的完全限定名,稱為命名空間.如:如果在cms資料庫中

使用blog.posts集合,那麼這個集合的命名空間就是cms.blog.posts.命名空間不得超過121位元組,

在實際應用中應該小於100位元組.

 

d)MongoDB shell

MongoDB內建一個javascript shell,可以從命令列與MongoDB執行個體互動.

1.運行shell

shell是功能完備的javascript解譯器,可以運行任何javascript程式: 

2.MongoDB用戶端

shell更重要的用途它是MongoDB用戶端.開啟的時候,shell會連到MongoDB伺服器的test資料庫,並將這個

資料庫連接賦值為全域變數db,這個變數是通過shell訪問MongoDB的主要進入點.

shell還有非javascript文法的擴充,這是為了方便SQL shell使用者而添加的,如:

選擇要使用的資料庫:

use test

可以通過db變數來訪問其中的集合,如db.users返回當前資料庫的users集合.

 

在shell中完成,CRUD

1.新增

insert函數添加一個文檔到集合裡面,如:儲存一篇部落格文章,首先,建立一個局部變數post,內容代表文檔的

javascript對象.

2.讀取

find會返回集合裡面所有的文檔,若只想查看一個文檔,可以用findOne

find和findOne可以接受查詢文檔形式的限定條件,通過條件來查詢文檔.使用find時,shell自動

最多顯示20個匹配文檔

3.更新

update 接受兩個參數:一個是要更新文檔的限定條件,另一個是新的文檔.如:向部落格中增加評論內容.

4.刪除

remove從資料庫中永久性的刪除文檔,在不使用參數調用的情況下,它會刪除一個集合內的所有文檔,它也可以

接受一個文檔作為條件刪除.如:

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.