Mac新手從入門到放棄MongoDB

1. 簡介javascript

  MongoDB 是一個基於分佈式文件存儲的數據庫。由C++語言編寫。旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。它支持的數據結構很是鬆散,是相似json的bson格式,所以能夠存儲比較複雜的數據類型。Mongo最大的特色是它支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引。若是你問我mongodb與mysql有啥關係,我說就像JavaScript和Java。

2. 特性
vue

  MongoDB 的設計目標是高性能、可擴展、易部署、易使用,存儲數據很是方便。其主要功能特性以下:java

(1)面向集合存儲,容易存儲對象類型的數據(在MongoDB 中數據被分組存儲在集合中,集合相似RDBMS 中的表,一個集合中能夠存儲無限多的文檔)。
(2)模式自由,採用無模式結構存儲(在MongoDB 中集合中存儲的數據是無模式的文檔,採用無模式存儲數據是集合區別於RDBMS 中的表的一個重要特徵)。
(3)支持徹底索引,能夠在任意屬性上創建索引,包含內部對象(MongoDB的索引和RDBMS 的索引基本同樣,能夠在指定屬性、內部對象上建立索引以提升查詢的速度)。
(4)支持查詢(MongoDB 支持豐富的查詢操做,MongoDB 幾乎支持SQL中的大部分查詢)。
(5)強大的聚合工具(MongoDB 除了提供豐富的查詢功能外,還提供強大的聚合工具,如count、group 等,支持使用MapReduce 完成複雜的聚合任務)。
(6)支持複製和數據恢復(MongoDB 支持主從複製機制,能夠實現數據備份、故障恢復、讀擴展等功能)。
(7)使用高效的二進制數據存儲,包括大型對象(如視頻)。使用二進制格式存儲,能夠保存任何類型的數據對象。
(8)自動處理分片,以支持雲計算層次的擴展(MongoDB 支持集羣自動切分數據,對數據進行分片可使集羣存儲更多的數據,實現更大的負載,也能保證存儲的負載均衡)。
(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++語言的驅動程序(MongoDB 提供了當前全部主流開發語言的數據庫驅動包,開發人員能夠輕鬆變成訪問MongoDB 數據庫)。
(10)文件存儲格式爲BSON(JSON 的一種擴展)(BSON 是對二進制格式的JSON 的簡稱,BSON 支持文檔和數組的嵌套)。
(11)能夠經過網絡訪問(能夠經過網絡遠程訪問MongoDB 數據庫)。
3. 核心
  在mongodb中基本核心的概念是文檔、集合、數據庫,具體見下表:

4. 優勢node

  • - 高可擴展性
  • - 分佈式計算
  • - 低成本
  • - 架構靈活,半結構化數據
  • - 關係簡潔,操做簡單有效 

5. 缺點mysql

  • - 沒有標準化
  • - 有限的查詢功能(到目前爲止)
  • - 安全性有限

6. 安裝webpack

  使用brew安裝,此外也可使用 curl 命令來下載安裝:git

brew install mongodb/sudo brew install mongodb

   若是出現上圖所示內容即表示安裝成功,Mac新手使用brew的時候必定要多注意執行命令以後的一些信息,上圖就提示了mongodb 的安裝路徑爲 /usr/local/Cellar/mongodb,若是須要修改mongodb的配置信息能夠執行命令 mongod --config /usr/local/etc/mongod.conf;es6

7. 配置github

  安裝成功以後不要着急啓動,若是以前已經成功使用過,那就能夠忽略配置這一項了,配置的話首先要知道數據庫存儲的默認目錄爲根目錄下的data/db;web

mkdir -p /data/db           // 須要建立一個目錄,爲mongodb默認的數據寫入目錄
chown `id -u` /data/db      // 給剛剛建立的目錄以可讀可寫的權限 
mongo --dbpath dir_name     // 也能夠修改目錄,dir_name 爲你的目錄名字

8. 啓動

  配置好以上信息以後就能夠啓動了,其實用brew管理這些軟件特別方便,全部的命令也幾乎相同;

brew services start mongodb/mongod

  若是出現上圖所示「Successfully started 'mongodb'」即表示啓動成功;

9. 鏈接

  成功啓動以後執行mongo命令鏈接數據庫,可能會出現下圖:

   若是成功出現上圖所示內容,而且出現箭頭表示數據庫鏈接成功,若是沒有鏈接成功的話多是因爲你以前使用並不是正常關閉致使生產了mongod.lock文件,意思是把數據庫暫時性鎖住了,能夠找到該文件直接刪除並從新啓動,若是仍是不行的話可使用命令ps -aef | grep mongo查看佔有的進程,經過命令kill - 9 id(進程號)殺死這個再也不使用的進程,嘗試從新啓動便可;

10. 建立數據庫(增)

  MongoDB 有建立新的數據庫的語法格式以下:(默認的數據庫爲 test,若是你沒有建立新的數據庫,集合將存放在 test 數據庫中)

show databases               //  show  查看有哪些數據庫,也可show dbs
use demo                     //  use  建立數據庫(若是數據庫不存在,則建立數據庫,不然切換到指定數據庫)
show collections             //  查看有哪些集合(collections至關於SQL中的一個個表)
db.createCollection('movie')        //  建立集合(至關於建立表)

11. 刪除數據庫(刪)

  MongoDB 刪除數據庫的語法格式以下:(刪除當前數據庫,默認爲 test,你可使用 db 命令查看當前數據庫名,這個命令必定要學會,刪庫跑路必備)

db.dropDatabase()        //  刪除當前數據庫,能夠用use進行選擇數據庫來刪除
db.collection.drop()     //  刪除當前數據庫中的集合collection 

12. 插入數據庫(插)

  MongoDB 使用 insert() 或 save() 方法向集合中插入數據,語法以下:

db.collection.insert(document)  //  給集合collection中插入數據,若是該集合不在該數據庫中, MongoDB 會自動建立該集合並插入文檔
db.collection.save(document)    //  若是不指定 _id 字段 save() 方法相似於 insert() 方法。若是指定 _id 字段,則會更新該 _id 的數據

  insert插數據時有幾點須要注意一下:

  • 1. 不一樣key-value須要用逗號隔開,而key:value中間是用冒號,按照標準的json格式來寫;
  • 2. 若是一個key有多個value,value要用[]。哪怕當前只有一個value,也儘可能加上[]以備後續的添加;
  • 3. 整個「數據塊」要用{}括起來;
  • 4. 若是不指定ID的話,數據庫默認會自動建立一個ID號,在同一個數據庫裏,每一個文檔的ID號是不一樣的;

13. 更新數據庫(改)

  MongoDB 使用 update() 和 save() 方法來更新集合中的文檔,語法以下:

update() 方法用於更新已存在的文檔。語法格式以下:

db.collection.update(
   <query>,  //  update的查詢條件,相似sql update查詢內where後面的
   <update>,  //  update的對象和一些更新的操做符(如$,$inc...)等,也能夠理解爲sql update查詢內set後面的
   {
     upsert: <boolean>,  //  可選,這個參數的意思是,若是不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入
     multi: <boolean>,  //  可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新
     writeConcern: <document>  //  可選,拋出異常的級別
   }
)

save() 方法經過傳入的文檔來替換已有文檔。語法格式以下:

db.collection.save(
   <document>,  //  文檔數據,若是與以前的文檔所有value值都有變化則會從新建立,因此必須保留一部分value值相同纔會更新;
   {
     writeConcern: <document>  //  可選,拋出異常的級別;
   }
) 

14. 查詢數據庫(查)

  MongoDB 查詢文檔使用 find() 方法。find() 方法以非結構化的方式來顯示全部文檔,能夠傳入各類不一樣的查詢條件,查詢數據的語法格式以下:

db.collection.find(query, projection) 
query :可選,使用查詢操做符指定查詢條件;
projection :可選,使用投影操做符指定返回的鍵。查詢時返回文檔中全部鍵值,只需省略該參數便可(默認省略)

db.collection.find().pretty()  //  pretty() 方法以格式化的方式來顯示全部文檔
db.collection.findOne()  //  只返回一條數據

15. 進階($type操做符/limit()/skip()/sort()/索引/分片/備份/監控/拓展)

  MongoDB 更高級的一些常見操做語法格式以下:

db.collection.find().pretty()       //  格式化輸出
db.collection.find().count()        //  查看集合中文檔的個數
db.collection.find().skip()         //  跳過指定數量的數據
db.collection.find().limit()        //  讀取指定記錄的條數
db.collection.find().sort({key:1})  //  經過參數指定排序的字段,並使用 1 和 -1 來指定排序的方式,其中 1 爲升序排列,而-1是用於降序排列
db.collection.getIndexes()          //  查看集合索引狀況
db.collection.dropIndexes()         //  刪除索引(不會刪除 _id 索引)
db.collection.createIndex({key:1})  //  建立索引(參數key 爲你要建立的索引字段,1爲按升序建立索引,-1爲按降序建立索引)
db.collection.aggregate($group)     //  聚合主要用於處理數據(如平均值,求和等),並返回計算後的數據結果,相似sql語句中的 count(*)。

$gt	大於
$gte	大於等於
$lt	小於
$lte	小於等於
$ne	不等於

   這些進階的常見操做,具體使用方法能夠查看官方文檔http://www.mongodb.org.cn/tutorial,固然你感興趣的話能夠爲中文社區作貢獻;

16. 總結

  MongoDB 的學習也有幾天了,如今終於有時間能夠總結記錄下來,本文主要是一些mongodb的核心基礎部分,比較適用於Mac新手學習,具體的操做代碼也貼了出來,能夠少走不少彎路,若是你也一步步的跟着步驟學到了這裏,應該算是基本入門了吧,至於放棄也是一種美,既然堅持學到了這裏,相信你也不會放棄的。其實這只是年前一個大項目的奠定工做,接下來就準備着手開發vue+webpack+es6+nodejs+mongodb的全棧項目了,若是你也想了解學習,歡迎繼續關注我!


個人博客http://www.cnblogs.com/lewiscutey

個人webhttps://lewiscutey.github.io

個人公衆號:天道酬勤Lewis

相關文章
相關標籤/搜索