這是mongo基礎篇,後續會連續更新4篇mongodb
你們好我叫MongoDb,自從07年10月10gen團隊把我帶到這個世界來,我已經13歲多啦,如今愈來愈多的小夥伴在擁抱我,我很高興。我是NoSQL你們族的一員,我是C++的親兒子啦。爲了你們更好的熟悉我,今天我先簡單從簡單的使用角度來介紹我本身。數據庫
首先仍是先介紹一下咱們的你們族NoSQL吧json
NoSQL只是他簡稱,他的中文名叫 非關係型數據庫,外文名叫Not Only SQL。他是對關係型數據庫的一個補充(RDBMS)。RDBMS追求數據存儲和查詢的高度結構化、嚴格的數據一致性;NOSQL不在意形式,重點關心效率,NOSQL是高性能、無模式、高可擴展的分佈式數據庫,NOSQL存儲包括四種類型:鍵值對存儲、列存儲、文檔存儲、圖形數據存儲。NoSQL就簡單介紹到這,這不是今天的重點,下面仍是重點介紹一下我本身(MongoDb),呵呵!數據結構
MongoDb自我介紹app
MongoDb是一個面向文檔存儲的鍵值對NOSQL數據庫,是一個最接近關係型數據庫的非關係數據庫。在數據存儲結構和查詢上使用BJOSN(相似於JSON)結構,BJOSN支持多層機構,在具體的使用過程當中,更像是操做Javascript腳本。正由於MongoDb的無模式化,在實際應用中變得更加靈活,易於擴展。與RDBMS同樣,支持主鍵、索引、檢索等操做,因爲非結構化因此不支持join查詢。分佈式
MongoDb的基本概念性能
具體的數據庫安裝就不在介紹了,網上一搜一大推。MongoDb採用BJON化的文檔存儲,因此其基本結構概念能夠結合JSON聯想一下:字段、文檔、集合、數據庫,這和RDBMS的屬性、列、表、數據庫是一一對應關係。下面以一個表格來對比說明一下:spa
簡單的一個表格顯示還不夠直觀,那咱們在來一張形象的圖片來講明一下吧!3d
用戶權限管理unix
在生成環境數據庫管理中,數據庫權限是一個很重要的功能。在具體的權限上,須要針對全局的權限控制,須要精確到具體的數據的權限,在具體的權限分類上包括:讀、讀寫、管理員等權限。下面列表介紹mongodb的內置權限:
經過上面的表,咱們能夠得出:根據權限的做用範圍上來看,權限分爲了兩大類權限:針對每一庫的權限、針對所有數據庫的權限。根據不一樣的權限分類,在賦值格式上也有必定差別,在具體的用戶權限分配上,一個用戶能夠同時分配多個權限。
新增用戶時權限初始化格式爲:
針對所有數據庫權限初始化命令格式:
db.createUser({user:"用戶名",pwd:"密碼",roles:["權限值"]})
針對指定數據庫權限初始化命令格式:
db.createUser({user:"用戶名",pwd:"密碼",roles:[ {role:"權限值",db:"對應的數據庫"},{role:"權限值",db:"對應的數據庫"}….]})
這樣說可能不怎麼好理解,那麼咱們仍是以實際工做的使用狀況來舉例說明。
條件假設:有3個數據庫:testdb00一、testdb002
須要給如用戶分配對應的權限
經過實際舉例,應該對權限的新增初始化操做命令有了理解,那麼下面咱們就來對權限的根據新操做命令簡單聊聊,其實根系和初始化具體的權限格式是一至的,具體以下:
針對所有數據庫權限更新命令格式:
db.updateUser("被更新用戶名",{pwd:"更新後的密碼",roles:["權限值"]})
針對指定數據庫權限更新命令格式:
db.updateUser("被更新用戶名",{pwd:"更新後的密碼",roles:[{role:"權限值",db:"對應的數據庫"},{role:"權限值",db:"對應的數據庫"}….]})
注意:updateUser的第二個參數有兩個節點:pwd和roles。若是不須要更新某一節點的數據,那麼直接不要該節點便可。
實例:繼續上面的實例繼續操做
數據庫(database)
具體的數據庫概念和RDBMS一致,一個mongodb能夠建立多個數據庫,不一樣數據庫也能夠存儲在不一樣的mongodb。系統的默認數據庫包括:admin(存儲用戶權限相關)、config(配置信息)、local(日誌信息)。針對數據庫咱們經常使用的操做包括:建立、刪除。具體的實現以下:
建立:use 數據庫名稱
當數據庫名稱不存在時,系統自動建立(建立後不能顯示,須要向裏面插入數據纔會顯示),存在則切換。
刪除:首先要切換到對於的數據庫,而後在執行dropDatabase命令
use 被刪除的數據庫名稱
db.dropDatabase()
集合(Collection)
集合是mongodb中對數據存儲的一個分組,和關係數據庫中的表是對應關係。集合中存儲的文檔數據的無固定格式,能夠自由存儲不一樣格式的bjson數據,可是在實際使用中,咱們仍是存儲同一類型的bjson數據。集合的常見的操做命令以下:
建立集合:
db.createCollection(集合名稱,集合規則),其中第二次參數爲一個json數據,非必填,具體的參數節點爲:
集合規則:{ capped :選填bool類型:設置改集合是否爲一個固定集合,
true:表明固定集合,集合中的數據不可修改,與size配對使用,表明當集合達到指定大小後,會自動覆蓋歷史數據(最早添加的數據),
size:選填數字類型:指定集合的最大存儲數據(字節數),當集合達到指定大小後,會自動覆蓋歷史數據(最早添加的數據) }
max: 選填數字類型:指定集合的最大存儲的文檔總個數,當文檔個數大於max值時,會自動替換歷史文檔
}
collection刪除:
db.集合名稱.drop();
文檔(Document)
文檔就一組鍵值(key-value)對數據(一個BJON),具體的一個文檔結構能夠多層嵌套,不一樣文檔間的數據結構能夠不同,而且相同節點的數據類型也可不同,這是與RDBMS最大的區別所在,這也奠基了MongoDB的高可擴展性。其實簡單的說就是一個一個的jon格式的數據。
文檔常見的幾個操做命令彙總:
字段
字段就很好理解了,就是文檔中的json數據的每個節點。
經過對mongodb的操做簡單介紹,其實咱們不難發現如下一些特性:
1.不管是對文檔的增、刪、改、查操做的參數一切皆json,在實際操做的時候,按照json方式來操做便可。
2.數據庫和集合均可以在使用是自動建立:
2.1 use 切換數據庫時,若是沒有數據庫自動建立;
2.2 db.集合.insert() 當集合不存在時,系統自動建立集合。
Mongodb的這一些特性用起來是否是很爽的感受。下面從數據庫的建立,到文檔的總體操做流程寫一些演示實例,來加深印象。
經過上面的實際操做,咱們發現全部新增文檔都會自動生成一個節點」_id」( ObjectId),該_id是mongodb系統自動生成的相似惟一主鍵,能夠很快的去生成和排序,包含 12 bytes,含義是:
1.前 4 個字節表示建立 unix 時間戳,格林尼治時間 UTC 時間,比北京時間晚了 8 個小時
2.接下來的 3 個字節是機器標識碼
3.緊接的兩個字節由進程 id 組成 PID
4.最後三個字節是隨機數
固然_id也能夠根據實際須要自定義賦值。
好了今天就先寫到這,經過本篇文章對mongo有了一個初步的認識瞭解,下一篇文章,咱們在一塊兒詳聊查詢,mongo的查詢仍是有不少聊的。謝謝您的查看。END