《MongoDB權威指南》學習整理----MongoDB簡介及基本概念
簡介
MongoDB是一種強大、靈活、追求效能、易擴充套件的資料儲存方式。是面向文件的資料庫,不是關係型資料庫,是NoSQL(not only SQL)的一種。所謂的面向文件,就是將原來關係型資料庫中的“行”的概念換成了更加靈活的"文件",以文件為儲存單位。文件的值可以是陣列、文件等複雜的資料模型。並且文件的鍵不會事先定義也不會固定不變。mongoDB設計的主要思想之一就是,將能交給客戶端的操作都要從服務端轉移到客戶端,例如生成objectid等操作。mongoDB版本遵從業界普遍規則:偶數為穩定版,奇數為開發版。mongoDB的安裝極為簡單,下載後,直接解壓即可。
功能特點
- 索引
MangoDB支援通用輔助索引,能進行多種快速查詢,提供多種索引能力。
- 儲存JavaScript
MangeDB中可以使用JS程式碼來起到關係資料庫中儲存過程的作用。
- 聚合
MangoDB支援MapReduce和其他聚合工具
- 固定集合
集合的大小是有上限的
- 檔案儲存
MangeDB支援簡單的檔案儲存。
- 不具備的功能
連線、事務
基本概念
文件
文件是MongoDB的核心、基本資料單元,類似於JS中的JSON物件,由多個key-value構成,但是支援更多的資料型別。多個鍵以及相關的值有序的放置在一起便是文件。在大多數程式語言中都是使用多個key-value的形式,java中是map,Python中是字典,JavaScript中是物件。
- 文件中的key/value是有序的,沒有相同的兩個文件。
- 文件中的value的資料型別沒有限制,甚至可以是文件。
- 文件的key一般應該是字串。
- 文件的key不能含有空字串,不能含有.和$以及_。
- 文件的key不能重複。
- mangoDB中,key和value都是區分資料型別和大小寫的。
集合
集合就是一組文件,如果說文件類似於關係資料庫中的行,那麼集合就是表。
集合是無模式的(模式的概念參見模式的意義)。一個集合中的文件可以是任意型別的,也就是說文件是可以任意組合的。
問題:集合存在的意義
- 雖然集合中可以儲存任意型別的文件組合,但是如果不妥善的組織、分類文件的儲存,那麼不利於資料的分類管理。
- 在一個存放多種不同型別的集合裡面查詢特定型別的文件在速度上不划算,最好是每種型別文件分別存在不同的集合中,加快查詢速度。
- 把同類資料放在同一個集合,保證資料聚合性。
- 同時,同類的文件放在同一集合中可以提高索引的有效性。
集合的命名
- 和key一樣不能有空字串
- 不能以"system."開頭,不能含有"$"
- 一個集合的完全限定名:資料庫名.集合(子集合)名稱,例如cms.blog.posts
子集合
在MangoDB中最常用的組織集合的方式就是子集合,也就是使用:名稱空間名.集合名 來定義集合名稱,這樣做的目的只是為組織結構更好。
集合的訪問
訪問集合我們一般使用db.集合名的方式,但是當集合的名稱恰好是資料庫屬性名時,這種方式就無法得到集合,只能使用:db.getCollection('集合名')的方式得到集合。同時,由於JS中,x.y等價於x['y'],所以可以用後邊一種方式訪問資料。
資料庫
MangoDB中最基本的儲存單元是文件,文件組成集合,集合組成資料庫。一個MangoDB例項可以承載多個數據庫,資料庫之間完全獨立。一般情況下,一個應用對應一個數據庫,類似於關係資料庫中的外模式。
命名
資料庫的名稱最終會變成系統的檔名稱。
- 不能是空字串
- 不得含有空格、點、斜槓與反斜槓以及空字串。
- 應該全部小寫
- 最多64位元組
系統預設資料庫
MangoDB系統中和傳統的關係資料庫一樣都會有一些初始化的資料庫儲存資料庫系統執行資訊。
- Admin
root庫。一些特定的伺服器端命令只能從這個庫執行。
- Local
local庫中的集合永遠都不會被複制,用於儲存不準備分散式儲存的、只儲存在本地(單伺服器)的集合。
- Config
當MangoDB用於分片設定時,config庫在內部使用,用於儲存分片相關的配置資訊。
MongoShell
mongoShell是用於與mongodb互動的工具,類似於navicat、sql/plus等資料庫互動工具。所以mongoShell在啟動前必須先啟動mongodb(使用mongodbHome/bin/mongod啟動mongodb例項)。而mongoshell其實就一個強大的javascript直譯器(使用mongodbHome/bin/mongo啟動mongoshell直譯器)。
可以再MongoShell中宣告函式、呼叫JS標準庫函式、宣告變數等,進行JS開發。
MongoShell中操作的簡單說明
建立--insert
語法:資料庫.集合.insert(文件)
說明:insert是將某些資料、文件插入到mongodb中,一般是以JS物件或者JS中的表示法來描述物件。
讀取--find
語法:資料庫.集合.find()/資料庫.集合.findOne()
說明:find是將文件從資料庫、集合中查找出來,可以接受查詢文件形式的限定條件。
更新--update
語法:資料庫.集合.update(目標更新文件的限定條件,新的文件)
說明:update用於將mongodb中的某個文件內容更新,接受兩個引數,第一個是文件限定物件,第二個是新物件
刪除--remove
語法:資料庫.集合.remove([文件限定物件])
說明:remove用於刪除文件,當remove沒有引數的時候刪除集合中所有的文件,如果有引數,那麼刪除引數限定的文件物件。
注意事項:
在mongoshell中可以方便的使用help命令來查詢或者得到某些命令的使用方法。例如db.foo.update命令,注意該命令update後邊沒有括號。並且想得到哪個函式的說明,只要該函式沒有()就可以檢視。