前面的話
為了儲存網站的使用者資料和業務資料,通常需要一個資料庫。MongoDB和Node.js特別般配,因為Mongodb是基於文件的非關係型資料庫,文件是按BSON(JSON的輕量化二進位制格式)儲存的,增刪改查等管理資料庫的命令和JavaScript語法很像。本文將詳細介紹MongoDB資料庫
資料庫
資料庫,顧名思義,是資料儲存的倉庫,主要功能有兩個
1、有組織地存放資料
與在磁碟上自己存放檔案不同,資料庫替使用者組織了資料的儲存形式,使用者只需要按照資料庫提供的介面將資料寫入,資料便會按照標準的格式被儲存起來
2、按照不同的需求進行查詢
資料庫不僅要能寫入資料,還支援資料查詢,並且能夠按照不同的需求進行查詢。因為儲存是有組織的,因此查詢上可以更規範化,查詢速度也會快很多
不同的資料庫的區別就是存放資料的組織不同,同時提供了不同種類的查詢。使用者可以按照自己的需求,選擇合適的資料庫
【分類】
資料庫的分類有很多種,按照對SQL語言的支援,可以分為以下兩種:
1、SQL資料庫,比如Oracle、Mysql等
2、NoSQL資料庫,比如Redis、MongoDB等
隨著在規模網際網路應用的出現,傳統的SQL資料庫遇到了一些設計上的弊端。比如,SQL對錶的定義使應用不夠靈活,橫向擴充套件比較困難。與一些特性難以滿足相比,反而是SQL資料庫的很多特性沒有用武之地。比如,在很多場景下,及時存取並不是必要的,也沒有特別多的事務需求,而這些額外的特性消耗著SQL資料庫的效能
因此NoSQL資料庫應運而生,NoSQL全稱是Not Only SQL,意即"不僅僅是SQL"。但事實上,絕大多數NoSQL資料庫都放棄了對SQL語言的支援。與SQL關係型資料庫相比,NoSQL非關係型資料庫大多放棄了一些特性。比如,放棄了實時一致性、對事務的完整支援以及多表查詢等。聽起來缺點很多,但收益也明顯,NoSQL資料庫簡單便捷、方便擴充套件,並且有更好的效能
概述
MongoDB是一個開源的NoSQL資料庫,在國內被稱為芒果資料庫。Linux、Apache、MySQL和PHP組成了非常有名的LAMP架構。現在,有人提議將LAMP中的代表M的MySQL替換為MongoDB
NoSQL資料庫有很多,為什麼要選擇MongoDB呢?
MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++ 語言編寫,旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。MongoDB使用集合(collection)和文件(document)來描述和儲存資料,集合(collection)就相當於表,文件(document)相當於行,欄位相當於列,不像MySQL之類的關係型資料庫,表結構是固定的,比如某一行由若干列組成,行行都一樣,而MongoDB不同,一個集合裡的多個文件可以有不同的結構,更靈活一些
MongoDB有自己很鮮明的特色,總結起來有以下4條
1、沒有表結構的限制
傳統SQL資料庫中,對每張表都需要定義表結構。如果有新的儲存需求,往往需要新增新的欄位,更改表結構。在一些場景下,會顯得很不方便,而對於MongoDB,這不再是問題。因為它沒有表結構這個概念,在使用一張表之前,不需要對這張表進行任何初始化操作。MongoDB的這種特性對快捷開發和多變的業務需求是很合適的
2、完全的索引支援
有些NoSQL資料庫,比如redis,它是記憶體資料庫,速度很快。但是,做為鍵值資料庫,只支援一種按鍵查詢的方式。靈活性、使用範圍和易用性都受到影響;再比如hbase,寫入速度很快。但是,同樣查詢受限,它只支援單索引,二級索引需要自己實現
而MongoDB支援單鍵索引、多鍵索引、全文索引和地理位置索引。所以MongoDB是功能非常完善的NoSQL資料庫,也被稱為最接近關聯式資料庫的非關聯式資料庫
3、良好的資料安全性和方便的規模擴充套件
MongoDB使用複製集做多副本儲存,以保證資料的安全性。同時,MongoDB內建的分片技術可以很方便地進行資料規模的擴充套件。分片技術是很新穎的一個特性,它包含了自動資料介面,動態擴容和縮容等一系列在其他資料庫中需要大量人工操作的工作,同時提供了對資料庫的統一訪問入口,不需要在應用層再進行分發,顯著減少了人工成本
4、完善的文件支援和驅動支援
安裝
首先,在官網的下載頁面選擇合適的MongoDB版本進行下載
然後,一步一步進行安裝即可
預設情況下,安裝到C盤的Program Files資料夾下的MongoDB資料夾中
伺服器配置
【搭建伺服器】
搭建伺服器,需要進行以下幾個步驟
1、建立data資料夾儲存資料庫的資料檔案;建立log資料夾儲存資料庫的日誌檔案;建立bin資料夾儲存資料庫的可執行檔案;建立conf資料夾來儲存資料庫的配置檔案
2、在windows系統下需要設定環境變數,否則在命令列中會提示mongod命令不可用
在環境變數的path中,新增mongod.exe檔案的目錄
3、接下來,有兩種方式啟動mongoDB服務,一種如下所示,設定dppath引數值為自定義的目錄路徑
mongod --dbpath=D:/app/mongo/data
由下圖看出,mongodb的預設埠是27017
4、另一種是在conf資料夾下新建mongod.conf檔案,在這個檔案中將設定mongodb啟動的配置引數
dbpath = data
logpath = log/mongod.log
mongod -f conf/mongod.conf
這種方法在命令列工具中沒有任何提示,因為記錄已經儲存到日誌檔案中,此時mongodb服務已經正常開啟
【連線伺服器】
在搭建好mongodb伺服器之後,需要使用客戶端mongo進行連線,才能進行下一步的操作
因為是使用mongo連線mongodb伺服器,所以需要保證啟動mongodb伺服器的命令列工具不被關閉,新開一個命令列工具,並輸入mongo 127.0.0.1/test,test為資料庫的名稱
【關閉mongod服務】
首先切換到admin資料庫(use admin),然後使用db.shutdownServer()命令來關閉服務
資料庫操作
【預設】
MongoDB 中預設的資料庫為 test,如果沒有建立新的資料庫,集合將存放在 test 資料庫中
【檢視】
使用show dbs來檢視資料庫
show dbs
【建立/切換】
使用use命令來切換/建立資料庫,會發現建立的資料庫並不在資料庫的列表中, 要顯示它,需要向資料庫插入一些資料
use db_name
【顯示當前資料庫】
使用db命令來顯示當前資料庫
db
【將資料寫入集合中】
使用db.集合名.insert(文件)來將文件的資料寫入集合中,文件的格式為JSON。而所有儲存在集合中的資料都是BSON格式。BSON是一種類json的一種二進位制形式的儲存格式,簡稱Binary JSON。
db.collection_name.insert()
【檢視集合】
上面的插入操作,會自動建立集合db1_coll1,使用show collections命令可以檢視當前資料庫中的所有集合
【刪除資料庫】
這將刪除當前所選資料庫。 如果沒有選擇任何資料庫,那麼它將刪除預設的’test
‘資料庫
db.dropDatabase()
集合操作
集合類似於SQL資料庫中的資料表,標識為collection
【檢視集合】
可以使用命令show collections
檢查建立的集合
[注意]也可以使用show tables來檢視集合
【建立集合】
在插入文件時,MongoDB首先檢查上限集合capped
欄位的大小,然後檢查max
欄位
db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>} )
name:集合的名字
capped:是否啟用集合限制,如果開啟需要制定一個限制條件,預設為不啟用,這個引數沒有實際意義
max:集合中最大條數限制,預設為沒有限制
size:限制集合使用空間的大小,預設為沒有限制,size的優先順序比max要高
autoIndexId:是否使用_id作為索引,預設為使用(true或false)
[注意]向集合中插入文件時,如果集合不存在 ,則會自動建立集合
【刪除集合】
MongoDB 的 db.collection_name.drop()
用於從資料庫中刪除集合。如果選定的集合成功刪除,drop()
方法將返回true
,否則返回false
資料匯入
在mongoimport的安裝目錄下,可以使用如下命令匯入資料檔案
使用window自帶的CMD,使用反斜槓
mongoimport -h 192.168.1.106:27017 -d db1 -c users --file D:\app\vue\imooc\resource\dumall-users
使用bash工具時,使用正斜槓
mongoimport的詳細命令如下
關閉服務
如果想關閉mongodb服務,可以使用mongo來實現
mongo 192.168.1.105:27017 use admin db.shutdownServer()
也可以直接使用mongod來實現
mongod --shutdown