MongoDB 入門

MongoDB 的安裝還是比較簡單的,我就不再這裏過多描述。百度一下即可,MongoDB是文檔數據庫,不支持事務,但是MongoDB 所提供的功能還是非常豐富的。筆者在項目當中,會用作存儲基礎數據(因爲不支持事務)。針對於微服務來說,我們會根據不用服務的實際業務去爲不同的服務選擇數據庫,例如筆者在寫商城項目的時候,就會選擇在商品服務當中使用MongoDB作爲數據庫,至於爲什麼學到後面你就會知道了。其實概念和介紹MongoDB 網上都有一大堆了,我就沒有必要ctrl C Ctrl V了。

按照MongoDB之後,通過mongod進行啓動。MAC的用戶可以使用brew進行安裝非常簡單,至於生成環境的安裝和在docker的安裝部署,後面有時間我也會寫一下。不過想想我的SpringCloud的筆記到目前爲止還沒有寫全,最近比較忙也沒有時間寫,而且被朋友荼毒我玩吃雞遊戲,就更加沒有時間寫了。但是後面我還是希望慢慢補上,事實上在實際項目當中已經有開始使用微服務開始投入生產環境的案例了,隨着後面慢慢實戰,希望能夠寫到更多的技術乾貨。廢話說多了,開始實際點的。

我在MAC環境當中是使用brew進行安裝的,非常簡單方便。然後我們可以通過mongod命令,啓動MongoDB的服務!(需要注意的是,mongod會讀取/data/db目錄下的文件,所以必須有讀寫權限)

MacBook-Pro:~ XXXUSER$ sudo mongod


然後接下來我們可以通過MongoDB自帶的mongo client 客戶端進行對MongoDB的訪問,事實上你會發現,操作起來非常不方便。沒有提示就不說了,重點是MongoDB的查詢方式是使用JS語句進行查詢的,所以一大堆的{}看到你頭暈眼花。所以我建議還是會用一下3T studio 可視化工具進行開發。下面我們還是演示一下如何使用mongo client進行MongoDB的訪問:

yanzhichaos-MacBook-Pro:~ yanzhichao$ mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Server has startup warnings: 
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 
2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> db
test
> 

但是以下的代碼演示我都會使用3T studio 進行

一、增刪改查基礎


1、創建數據庫

這個創建就非常簡單了。直接使用use 命令進入數據庫,如果沒有這個數據庫就會自動創建一個,直接執行db會顯示當前數據庫的名稱

use product_service;
db;

結果:

product_service


2、創建collection(等於關係型數據庫的表)

我們可以理解MongoDB的每個collection爲一個表,每一個文檔爲collection的行。MongoDB最爲強大之處,在於它的靈活性。下面我將添加一個文檔(等於一行數據)到product collection 當中。

var newProduct = {product_name:"iPhoneX",price:8999,description:"一臺貴到666的手機",product_number:"9830829131",brand:"蘋果"};
db.product.insert(newProduct);
解釋一下:db是當前數據庫,product是collection,insert是方法代表插入。MongoDB支持JavaScript大部分的語法,我這裏使用了一個變量定義了一個對象,然後通過insert方法插入到product數據庫當中。如果product 這個collection不存在,MongoDB會幫你自動建立一個。


我們可以通過以下命令獲得我們插入到product的文檔,後面會詳細介紹查詢方法。

db.product.find();
結果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :8999.0, 

    "description" :"一臺貴到666的手機", 

    "product_number" : "9830829131", 

    "brand" :"蘋果"

}

可以看到我們已經插入成功了。事實上,我們還可以每個文檔插入的東西完全不一致,MongoDB沒有要求collection的數據是結構化的。所以我們在SQL數據庫改改表結構是非常痛苦的事情,但是在MongoDB完全不存在這樣的問題。


3、簡單的查詢

上面已經使用過find方法了,我們還可以使用findOne方法。唯一的區別就是findOne是返回一個,find是返回多個。

db.product.findOne();

結果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :8999.0, 

    "description" :"一臺貴到666的手機", 

    "product_number" : "9830829131", 

    "brand" :"蘋果"

}


4、簡單的更新

我們可以通過Update語句進行對文檔的更新

db.product.update({product_name:"iPhoneX"},
{product_name:"iPhoneX",price:9100,description:"一臺貴到666的手機",product_number:"9830829131",brand:"蘋果"});
可以發現,我們更新整個文檔的。所以我必須要將整個文檔都寫上。至於我只想更新其中幾個屬性字段的話,後面會將。淡定!!!

至於一開始的{product_name:"iPhoneX"}是作爲一個查詢條件,就是說product_name爲iPhoneX的文檔進行修改。

查詢結果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :9100.0, 

    "description" :"一臺貴到666的手機", 

    "product_number" : "9830829131", 

    "brand" :"蘋果"

}


5、刪除文檔

刪除文檔也非常簡單,我們只需要提供要刪除的文檔匹配條件就行

db.product.remove({product_name:"iPhoneX"});
如果括號中,不添加任何參數就刪除全部文檔,更新也是一樣的,如果括號沒有條件就全部更新。

如果是刪除全部文檔的話,最爲徹底的方式還是直接把整個collection刪除好,沒有別的,就是速度快。

db.product.drop();


二、基本數據類型

在概念上來說,MongoDB的文檔與JavaScript的對象非常相似,可以認爲它就是JSON差不多。事實上JSON所支持的數據類型沒有MongoDB那麼豐富。例如日期類型,id類型等等。

null:用於表示空值 {property:null}

boolean:沒有什麼好說 true和false {property:false}

數值:這個也沒有什麼好說的,默認是64位浮點數,也可以使用NumberInt或者NumberLong帶符號整型。{property:123}

String:更加沒有什麼好說的,就是字符串 {property:"abc"}

日期:這個存儲的是毫秒,重點是不存時區 {property:new Date()}

正則表達式:這個可以存正則表達式,但是比較少用{property:/weibo/i}

數組:{property:["a","b","c"]}

對象id:這樣要說一下,這個是等於唯一的主鍵。這個鍵又MongoDB自動生成,可靠的唯一,在插入的文檔的過程中如果沒有手動添加_id屬性的話,MongoDB將會自動爲你創建_id並賦值唯一的id對象類型。{_id:ObjectId()}

代碼:對沒錯還可以存代碼,直接寫個方法作爲value

對象類型:簡單來說就是內嵌 {property:{username:"tony",age:18}};



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章