因為 MongoDB 沒入門,我丟了一份實習工作

来源:https://www.cnblogs.com/qing-gee/archive/2020/06/07/13061317.html
-Advertisement-
Play Games

有時候不得不感慨一下,系統升級真的是好處多多,不僅讓我有機會重構了之前的爛代碼,也滿足了我積極好學的虛榮心。你看,Redis 入門了、Elasticsearch 入門了,這次又要入門 MongoDB,感覺自己變禿的同時,也變強大了。 小伙伴們在繼續閱讀之前,我必須要聲明一點,我對 MongoDB 並 ...


有時候不得不感慨一下,系統升級真的是好處多多,不僅讓我有機會重構了之前的爛代碼,也滿足了我積極好學的虛榮心。你看,Redis 入門了、Elasticsearch 入門了,這次又要入門 MongoDB,感覺自己變禿的同時,也變強大了。

小伙伴們在繼續閱讀之前,我必須要聲明一點,我對 MongoDB 並沒有進行很深入的研究,僅僅是因為要用,就學一下。但作為一名負責任的技術博主,我是花了心思的,這篇入門教程,小伙伴們讀完後絕對會感到滿意,忍不住點贊。

當然了,小伙伴們遇到文章中有錯誤的地方,不要手下留情,可以組團過來捶我,但要保證一點,不要打臉,我怕毀容。

01、MongoDB 是什麼

MongoDB 是一個基於分散式的文件存儲資料庫,旨在為 Web 應用提供可擴展的高性能數據存儲解決方案。

以上引用來自於官方,不得不說,解釋得文縐縐的。那就讓我來換一種通俗的說法給小伙伴們解釋一下,MongoDB 將數據存儲為一個文檔(類似於 JSON 對象),數據結構由鍵值對組成,類似於 Java 中的 Map,通過 key 的方式訪問起來效率就高得多,對吧?這也是 MongoDB 最重要的特點。

MongoDB 提供了企業版(功能更強大)和社區版,對於我們開發者來說,拿社區版來學習和使用就足夠了。MongoDB 的驅動包很多,常見的編程語言都有覆蓋到,比如說 Java、JavaScript、C++、C#、Python 等等。

很多知名的互聯網公司都在用 MongoDB,比如說谷歌、Facebook、eBay 等等。總之,值得信賴,小伙伴們放心入門,技多不壓身啊,就當是給自己一次學習的機會。

02、安裝 MongoDB

MongoDB 針對不同的操作系統有不同的安裝包,我們這篇入門的文章就以 Windows 為例吧。

官網下載地址如下:

https://www.mongodb.com/download-center/community

最新的版本是 4.2.6,我選擇的是安裝版,msi 格式的,264M 左右。下載完就可以雙擊運行安裝,傻瓜式的。

建議選擇「Custom」自定義安裝,如下圖所示。

以服務模式運行,並配置好數據和日誌目錄,如下圖所示。

建議取消勾選安裝 MongoDB 的圖形化客戶端工具,否則安裝速度慢到你想要去扣會手機。

安裝完成後進入到 bin 目錄下,雙擊 mongo.exe 文件就可以連接到 MongoDB 服務了。

1)MongoDB 的預設埠號為 27017。

2)MongoDB 的版本號為 4.2.6。

預設會連接到 test 文檔(相當於數據),可以通過 db 命令查詢。

還可以運行一些簡單的算術運算:

那如何停止服務呢?可以直接點擊右上角的 X 號——粗暴、壁咚。

03、安裝 Robo 3T

Robo 3T 提供了對 MongoDB 和 SCRAM-SHA-256(升級的 mongo shell)的支持,是一款輕量級的 MongoDB 客戶端工具。

下載地址如下:

https://robomongo.org/download

最新的版本是 1.3,選擇 zip 格式進行下載,23M 左右。下載完成後,解壓就行了。

包目錄不再一一解釋了,進入 bin 目錄下,雙擊運行 robo3t.exe 文件,啟動 Robo 3T 客戶端。

點擊「Create」創建一個 MongoDB 的連接。

連接成功後,就可以操作 MongoDB 了。

(不過,小伙伴們這時候也不太知道該怎麼操作,畢竟 MongoDB 的一些相關概念還不清楚,無從下手啊)

04、MongoDB 的相關概念

隨著互聯網的極速發展,用戶數據也越來越龐大,NoSQL 資料庫的發展能夠很好地處理這些大的數據,MongoDB 是 NoSQL 資料庫中的一個典型的代表。

說到這,可能有些小伙伴們還不知道 NoSQL 是啥意思,我簡單解釋一下。NoSQL 可不是沒有 SQL 的意思,它實際的含義是 Not Only SQL,也就是“不僅僅是 SQL”,指的是非關係型資料庫,和傳統的關係型資料庫 MySQL、Oracle 不同。

MongoDB 命名源於英文單詞 humongous,意思是「巨大無比」,可以看得出 MongoDB 的野心。MongoDB 的數據以類似於 JSON 格式的二進位文檔存儲:

{
    name"沉默王二",
    age: 18,
    hobbies: ["寫作""敲代碼"]
}

在進行下一步之前,需要先來理解 MongoDB 中的幾個關鍵概念,比如說什麼是集合,什麼是文檔,什麼是欄位等等。MongoDB 雖然是非關係型資料庫,但和關係型資料庫非常相似。

看完上面這幅圖(圖片來源於好朋友 macrozheng 的文章),是不是瞬間就清晰了?

05、在 Java 中使用 MongoDB

有些小伙伴可能會問,“二哥,我是一名 Java 程式員,我該如何在 Java 中使用 MongoDB 呢?”這個問題問得好,這就來,這就來。

第一步,在項目中添加 MongoDB 驅動依賴:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.0.3</version>
</dependency>

第二步,新建測試類 MongoDBTest:

public class MongoDBTest {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create();
        MongoDatabase database = mongoClient.getDatabase("mydb");
        MongoCollection<Document> collection = database.getCollection("test");

        Document doc = new Document("name""沉默王二")
                .append("age""18")
                .append("hobbies", Arrays.asList("寫作""敲代碼"));
        collection.insertOne(doc);

        System.out.println("集合大小:" +collection.countDocuments());

        Document myDoc = collection.find().first();
        System.out.println("文檔內容:" + myDoc.toJson());
    }
}

1)MongoClient 為 MongoDB 提供的客戶端連接對象,不指定主機名和埠號的話,預設就是“localhost”和“27017”。

如果小伙伴想自定義主機名和埠號的話,也可以通過字元串的形式:

MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");

是不是感覺和 MySQL 的連接字元串挺像的?

2)getDatabase() 方法用於獲取指定名稱的資料庫,如果資料庫已經存在,則直接返回該 DB 對象(MongoDatabase),否則就創建一個再返回(省去了判空的操作,非常人性化)。

3)getCollection() 方法用於獲取指定名稱的文檔對象,如果文檔已經存在,則直接返回該 Document 的集合對象,否則就創建一個再返回(和 getDatabase() 方法類似)。

有了文檔對象(MongoCollection)後,就可以往裡面添加具體的文檔內容了。

 Document doc = new Document("name""沉默王二")
                .append("age""18")
                .append("hobbies", Arrays.asList("寫作""敲代碼"));

Document 對象來源於 org.bson 包下,可以在實例化該對象之後通過 append() 方法添加對應的鍵值對,非常方便,就像 String 類的 append() 方法一樣。

有了文檔對象後,就可以通過 insertOne() 方法將文檔添加到集合當中了。

4)countDocuments() 方法用於獲取集合中的文檔數目。

5)要查詢文檔,可以通過 find() 方法,它返回一個 FindIterable 對象,first() 方法可以返回當前集合中的第一個文檔對象。

好了,來看一下程式的輸出結果:

集合大小:1
文檔內容:{"_id": {"$oid""5ebcaa76465cab3f18b93e1a"}, "name""沉默王二""age""18""hobbies": ["寫作""敲代碼"]}

完全符合我們的預期,perfect!

也可以通過 Robo 3T 查看“mydb”資料庫,結果如下圖所示。

06、鳴謝

好了,我親愛的小伙伴們,以上就是本文的全部內容了,是不是看完後很想實操一把 MongoDB,趕快行動吧!如果你在學習的過程中遇到了問題,歡迎隨時和我交流,雖然我也是個菜鳥,但我有熱情啊。

另外,如果你想寫入門級別的文章,這篇就是最好的範例。

我是沉默王二,一枚有趣的程式員。如果覺得文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀,回覆【666】更有我為你精心準備的 500G 高清教學視頻(已分門別類)。

本文 GitHub 已經收錄,有大廠面試完整考點,歡迎 Star。

原創不易,莫要白票,請你為本文點個贊吧,這將是我寫作更多優質文章的最強動力。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 11 類型映射 11.1 引言 Chances are, you are reading this chapter for one of two reasons; you either want to customize SWIG's behavior or you overheard someon ...
  • 1. Java跨平臺原理(位元組碼文件、虛擬機) C/C++語言都直接編譯成針對特定平臺機器碼。如果要跨平臺,需要使用相應的編譯器重新編譯。 Java源程式(.java)要先編譯成與平臺無關的位元組碼文件(.class),然後位元組碼文件再解釋成機器碼運行。解釋是通過Java虛擬機來執行的。 位元組碼文件不 ...
  • 本教程源碼請訪問:tutorial_demo 一、概述 之前我們學習了AOP,然後通過AOP對我們的Apache Commons DbUtils實現單表的CRUD操作的代碼添加了事務。Spring有其自己的事務控制的機制,我們完全可以在項目中使用Spring自己的事務控制機制。 JavaEE體系進行 ...
  • 【寫在前面:一般能想出的方案】 <方案1:基於加密演算法本身的實現> 適合一部分有很強的演算法能力積累的同學,當然網上也有一些分享,但肯定不全面或者說沒有後續解答或支持。 話說也沒有想象得複雜,因為存在一些操作系統內置的組件,例如:openssl, 各種語言基本都可以實現符合openssl演算法規範的處理 ...
  • 深入理解:設計模式中的七大原則 一、單一原則 概念理解: 1個類只負責一個功能領域中的相應職責。 二、開閉原則(目標) 概念理解: 抽象是開閉原則的關鍵。 怎麼做: 面向介面、抽象類機制編程 三、里氏代換原則(基礎) 概念理解: 開閉原則的最重要實現方式之一;所有引用基類的地方必須能透明的使用其子類 ...
  • 設計模式中的關係總結 在軟體系統中,類並不是獨立存在的,類與類之間存在各種關係,對於不同類型的關係,UML提供了不同的表示方式。現在來總結梳理下: 一、關聯關係 類與類之間最常用的一種關係,是一種結構化的關係,用實線連接有關聯關係的對象所對應的類。java中,常將一個類的對象作為另一個類的成員變數。 ...
  • IDEA下一個簡單的mybaties測試程式,適合初學者閱讀。 目錄結構及lib: 在src>main>java 下 根據資料庫表創建實體類:com.itheima.domain.User 註意:表欄位名和實體屬性要對應一致 package com.itheima.domain; import ja ...
  • 今天整理了下,springboot下單元測試基本用法 若使用了 @RunWith(SpringRunner.class)配置,需要用 org.junit.Test運行,juint4包, junit5包org.junit.jupiter.api.Test 不需要RunWith註解. 一 引入依賴 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...