文章目錄
MongoDB 4 系列(1)概述與安裝
前言
之前很早時候,因爲參加牛客的讀書筆記活動,曾做過一定筆記和小實驗,當時沒得很深入的研究。現在打算騰出手來,好好的學習一番。
之前的筆記都是基於MongoDb的3.0x版本,比較老舊。目前來說,我打算用最近最新的MongoDB,版本是4.2.3。進行學習,目前工作中需要要用。
概述
MongoDB 是一個基於分佈式文件存儲的文檔數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。
·
主要特點
- MongoDB 是一個面向文檔存儲的數據庫,操作起來比較簡單和容易。
- 你可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)來實現更快的排序。
- 你可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
- 如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分佈在計算機網絡中的其他節點上這就是所謂的分片。
- Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
- Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
- Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
- Map函數和Reduce函數是使用Javascript編寫的,並可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
- GridFS是MongoDB中的一個內置功能,可以用於存放大量小文件。
- MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
- MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
- MongoDB安裝簡單。
mongoDB的雲庫
MongoDB現在挺友好,有永久免費的沙箱MongoDB雲使用,提供學習,有8G很不錯了。
現在博文並不打算用該處教怎麼創建clusters,因爲很簡單。
進行簡單的登錄和註冊後,就能看見自己的MongoDB雲上數據庫了。
MongoDB資源
以下兩款GUI的MongoDB工具還不錯,當然也可以選其他的。本次博文將以Studio 3T爲主(因爲它還在免費試用期,而且的確好用)。
下載頁面。
Studio 3T
Studio 3T是適用於Windows,Mac和Linux的用於MongoDB的專業GUI和IDE。 無論使用者是否具有MongoDB查詢語言知識均可更快地瀏覽和管理數據,該工具可以用於構建查詢,數據瀏覽,聚合和數據比較,導入/導出,代碼生成等功能。
安裝時,會讓你選擇哪一種你喜歡的界面,如下所示,我個人感覺哪一種都行,選擇第二種更適合擁有高級mongoDB查詢基礎的人員,目前學習來說,先以第一種爲主。
最後的界面如下所示。
Robo 3T
是Studio3T的免費版本,說強大也算強大,說不強大也不強大。
morphia
morphia是現在大部分公司所用的進行mongoDB數據保存、查詢的工具,,現在MongoDB已經將其挪到社區進行維護,github的地址請點擊這裏。它能讓Java實體類到MongoDB文檔的映射,透明地將Java實體映射到MongoDB文檔並返回。
mongoDB在maven官方倉庫,老式的在2017年1月最後更新到1.3.2。
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.3.2</version>
</dependency>
2018年底,MongoDB向社區貢獻了Morphia,以維護和發展該項目。以下是更新後的maven引入:
<dependency>
<groupId>dev.morphia.morphia</groupId>
<artifactId>core</artifactId>
<version>1.4.1</version>
</dependency>
移交到社區後,發展到博文現在,當前的版本已經到了2.0.0版本。
1.4.0 的版本主要是包名和Maven座標名的改變,大致實現功能和1.3.2相同。到了1.5.x已經更改了許多,把Option類相關的引入的內容都標記爲棄用,以此簡化,還做了很多更改,是爲了2.0的過渡和未來的更新。
2.0的目標是爲了精簡和簡單化,已經擁抱java 11及以上的版本,而且引入更流暢的API,更新了映射器等等。
爲了學習所用,目前打算採用的座標名爲org.mongodb.morphia的項目,即1.3.2。
MongoDB Java Drivers
與morphia一起使用的是mondoDB的java 驅動器,用以和MongoDB進行同步。github地址請點擊這裏。
本次學習,打算先試水3.12.1
maven引用很簡單了,就如下所示,打算先用3.12.1:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.1</version>
</dependency>
Windows安裝mongoDB
本次安裝的版本是MongoDB 4.2.3 社區版,下載地址。
然後雙擊運行即可,建議用自定義。
接下來都用默認值即可。
然後去到安裝目錄下的bin目錄,雙擊mongo.exe。
可以試着輸入下面的命令測試:
use tutorial
可以看見輸出如下所示:
接下來插入一條數據試試。
db.users.insert({username:"yuyuntan"})
Studio3T連接mongoDB
使用Studio3T進行連接,點擊測試連接即可,因爲是默認的,我這個測試連接是通過的。
然後就可以看見如下所示:
剛剛創建的數據都存在了。
連接altas雲庫
好了,再來回顧一下,altas。
當你創建你的altas集羣后,我們要怎麼連接,下面教了。
先點擊CONNECT按鈕。
這裏點擊後會彈出頁面框。
這個地方是加入你當前IP地址入白名單,個人認爲爲了簡單化,就加0.0.0.0。
接着創建用戶名和密碼。
接下來就通知你創建成功了用戶,接下來選擇連接的方式。
接下來先選第一個
看見中間讓你複製的了麼,先把你現在打開的mongoDB的exe先關閉。
然後還在bin目錄下,輸入那個可複製的命令。
mongo "mongodb+srv://cluster0-cgkii.mongodb.net/test" --username yuyuntan
然後輸入密碼就可以了,如果密碼不正確是打不開的。
接着回到頁面,就可以看見連接數。
接着,如果我要Studio3T也連接上去,再繼續點擊CONNECT按鈕。
選擇中間的這個。
接着選擇語言,我選java,3.6及以上。
複製後得到:
mongodb+srv://yuyuntan:<password>@cluster0-cgkii.mongodb.net/test?retryWrites=true&w=majority
用自己的密碼替換中間 <password>
。
隱私問題,打碼了密碼。
然後對下面紅線的進行鼠標雙擊。
就看見了。
java 代碼連接altas雲庫
首先要引入兩個pom文件。
這裏引入的分別是這兩個:
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.1</version>
</dependency>
連接的代碼如下所示:
MongoClientOptions.Builder builder = MongoClientOptions.builder()
// 設置最大連接數
.connectionsPerHost(10)
// 連接超時時間
.connectTimeout(10_000)
// 設置socket連接超時時間
.socketTimeout(20_000)
// 設置是否啓用遊標
.cursorFinalizerEnabled(true)
// 描述副本集的讀取行爲
.readPreference(ReadPreference.primary());
// 創建mongo client 連接的uri資源
MongoClientURI uri = new MongoClientURI(connectUrl,builder);
MongoClient mongoClient = new MongoClient(uri);
// 讀取的數據庫名
String databaseName = "tutorial";
// use tutorial
MongoDatabase db = mongoClient.getDatabase(databaseName);
// db.getCollection("users")
MongoCollection<Document> users = db.getCollection("users");
// db.getCollection("users").find()
MongoCursor cursor = users.find().cursor();
while (cursor.hasNext()){
System.out.println(cursor.next());
}
其中connectUrl就是
mongodb+srv://yuyuntan:<password>@cluster0-cgkii.mongodb.net/test?retryWrites=true&w=majority
用自己的密碼替換中間 <password>
。
最後輸出結果如下所示:
總結
mongoDB本篇主要是列舉一些使用工具和如何使用這些資源,並且會進行代碼的示例描述。不一定盡善盡美,希望能對看者也幫助。
參考文獻
[2] MongoDB菜鳥教程
[3] atlas官方文檔