MongoDB資料庫基礎操作

小火柴的藍色理想發表於2017-07-17

前面的話

  為了儲存網站的使用者資料和業務資料,通常需要一個資料庫。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

 

相關文章