MongoDB的下載與安裝以及與SpringBoot進行集成

MongoDB簡介

MongoDB是由 C++的一個基于分布式文件存儲的數(shù)據(jù)庫,為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案蛾娶。支持的數(shù)據(jù)結構非常松散敦腔,因此可以存儲比較復雜的數(shù)據(jù)類型。模式自由(schema-free)胞谭,意味著對于存儲在MongoDB數(shù)據(jù)庫中的文件垃杖,不需要知道任何結構定義,完全可以把不同結構的文件存儲在同一個數(shù)據(jù)庫里丈屹。所以說MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品调俘,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。
Github地址:https://github.com/mongodb/mongo
官方網(wǎng)站:https://www.mongodb.com/
官方文檔:https://docs.mongodb.com/
中文社區(qū):http://www.mongoing.com/

文件數(shù)據(jù)庫

MongoDB中的記錄是一個文檔脉漏,它是由字段和值對組成的數(shù)據(jù)結構苞冯。MongoDB文檔類似于JSON對象。字段的值可以包括其他文檔侧巨,數(shù)組和文檔數(shù)組舅锄。

image.png

MongoDB主要特點:

1.高性能:對嵌入式數(shù)據(jù)模型的支持,減少了對數(shù)據(jù)庫IO操作司忱。索引支持更快的查詢皇忿,并且可以包含來自嵌入式文檔和數(shù)組的鍵。
2.豐富的查詢語言:MongoDB支持豐富的查詢語言以支持讀寫操作(CRUD)以及數(shù)據(jù)聚合坦仍,文本搜索空間查詢
3.高可用性:MongoDB的拷貝工具稱為副本集鳍烁,副本集就是通過部署多個mongod實例構成的一個集群,這個集群中的mongod之間有主從關系繁扎。提供了數(shù)據(jù)復制冗余和通過選舉機制實現(xiàn)自動故障轉移
4.水平可伸縮性:MongoDB提供了分片集群部署模式幔荒,在分片集群部署中,每個分片負責保存一部分數(shù)據(jù)梳玫,對于每個分片爹梁,仍然可以采用副本集的方式,通過復制冗余的方式提澎,保證這部分數(shù)據(jù)的高可用性姚垃。從3.4版本開始,MongoDB支持基于分片創(chuàng)建數(shù)據(jù)區(qū)域盼忌。在集群中积糯,MongoDB僅將區(qū)域覆蓋的讀取和寫入指向區(qū)域內(nèi)的分片。
5.MongoDB支持多個存儲引擎
WiredTiger(默認存儲引擎):非常適合大多數(shù)工作負載,提供文檔級并發(fā)模型谦纱,檢查點和壓縮等功能看成,還支持靜態(tài)加密。
內(nèi)存存儲引擎:它不是將文檔存儲在磁盤上服协,而是將它們保留在內(nèi)存中绍昂,以實現(xiàn)更可預測的數(shù)據(jù)延遲。
MMAPv1:是MongoDB 3.0及更早版本的默認存儲引擎偿荷,現(xiàn)不推薦使用

下載社區(qū)版

下載地址:https://www.mongodb.com/download-center/community
推薦下載安裝版窘游,可以直接安裝配置為系統(tǒng)服務

image.png

安裝步驟

1.Next
image.png
2.接受,next
image.png
3.如果不想把軟件裝在系統(tǒng)盤跳纳,就選擇Custom忍饰,然后Next
image.png
4.選擇安裝路徑,next
image.png
5.從 MongoDB 4.0 開始寺庄,可以在安裝期間配置 MongoDB 作為服務艾蓝,不需要像以前版本那樣輸入一堆命令來將 MongoDB 配置成 Windows 服務來自動運行力崇。
image.png

網(wǎng)絡服務用戶: Windows 內(nèi)置的 Windows 用戶帳戶
本地或域用戶:
對于現(xiàn)有本地用戶帳戶,Account Domain 指定為.赢织,并為該用戶指定 Account NameAccount Password
對于現(xiàn)有域用戶亮靴,指定 Account DomainAccount NameAccount Password
Service Name:也就是Windows 服務的服務名于置,如果你已有指定名稱的服務茧吊,則必須選擇其他名稱。
Data Directory:數(shù)據(jù)保存目錄八毯,如果該目錄不存在搓侄,安裝程序將創(chuàng)建該目錄并為服務用戶設置訪問權限
Log Directory:日志保存目錄,如果該目錄不存在话速,安裝程序將創(chuàng)建該目錄并為服務用戶設置訪問權限

6.不要勾選 Install MongoDB Compass讶踪,貌似勾選安裝MongoDB Compass的話會很慢,這個不影響使用
7.開始安裝
image.png

啟動

安裝完啟動會發(fā)現(xiàn)啟動失敗泊交,先ignore忽略掉
image.png
安裝完成
image.png
啟動服務成功的話需要到bin目錄下找到mongod.cfg文件
image.png
找到并打開編輯乳讥,把mp:去掉,保存
image.png
WIN+X進入計算機管理→服務和應用程序→服務活合,

找到對應服務將其啟動即可

image.png

MongoDB默認端口是27017雏婶,所以在瀏覽器上訪問http://localhost:27017/,需要修改可以到mongod.cfg文件中配置

顯示如下圖說明啟動成功白指,可以使用Navicat可視化工具對MongoDB進行操作

image.png

MongoDB與SpringBoot進行集成

以圖片上傳為例子
實體類
@Data
public class File {
    private String id;
    private String name;
    private String contentType;
    private long size;
    private byte[] content;
    public File(String name, String contentType, long size,byte[] content) {
        this.name = name;
        this.contentType = contentType;
        this.size = size;
        this.content = content;
    }
}
兩種方式實現(xiàn)DAO層

1.實現(xiàn)MongoRepository統(tǒng)一接口操作MongoDB
Spring Data JPA和Spring Data MongoDB共享相同的通用基礎架構。與JPA存儲庫一樣酵紫,基本原則是基于方法名稱自動構造查詢告嘲。

public interface FileRepository extends MongoRepository<File, String> {
}

MongoRepository源碼如下

@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    <S extends T> List<S> saveAll(Iterable<S> var1);
    List<T> findAll();
    List<T> findAll(Sort var1);
    <S extends T> S insert(S var1);
    <S extends T> List<S> insert(Iterable<S> var1);
    <S extends T> List<S> findAll(Example<S> var1);
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

為什么具有Crud操作呢

注意看以下繼承關系

public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>

不難發(fā)現(xiàn)最后有繼承CrudRepository接口
CrudRepository源碼

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    Optional<T> findById(ID var1);
    boolean existsById(ID var1);
    Iterable<T> findAll();
    Iterable<T> findAllById(Iterable<ID> var1);
    long count();
    void deleteById(ID var1);
    void delete(T var1);
    void deleteAll(Iterable<? extends T> var1);
    void deleteAll();
}
2.使用Spring Data MongoDB提供的MongoTemplate,與Spring的JdbcTemplate設計非常相似
Controller層奖地,這里選擇使用MongoTemplate橄唬,直接注入使用即可
@RestController
public class FileUploadApi {
    @Autowired
    MongoTemplate mongoTemplate;

    @PostMapping("/upload")
    public JSONObject handleFileUpload(@RequestParam MultipartFile file) {
        JSONObject jsonObject=new JSONObject();
        try {
            File newFile=mongoTemplate.save(new File(file.getOriginalFilename(),  file.getContentType(), file.getSize(), file.getBytes()));
            jsonObject.put("file_message",mongoTemplate.findById(newFile.getId(),File.class));
        } catch (IOException ex) {
            jsonObject.put("file_message","上傳失敗");
        }
        return jsonObject;
    }
}
關于SpringBoot配置

spring.data.mongodb.database設置MongoDB連接數(shù)據(jù)庫,默認情況下連接的是test數(shù)據(jù)庫
spring.data.mongodb.hostMongoDB服務器地址参歹,默認localhost
spring.data.mongodb.port 端口仰楚,默認 27017
spring.data.mongodb.uriMongoDB的uri,多用于集群犬庇,默認mongodb://localhost/test僧界,多數(shù)據(jù)源用,分隔

啟動測試

image.png

Navicat中看到存入的數(shù)據(jù),_id_class是MongoDB自動生成的

image.png

推薦參考:

官方示例:https://github.com/spring-projects/spring-data-book/tree/master/mongodb
API文檔:https://docs.spring.io/spring-data/mongodb/docs/2.1.3.RELEASE/api/

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臭挽,一起剝皮案震驚了整個濱河市捂襟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欢峰,老刑警劉巖葬荷,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨共,死亡現(xiàn)場離奇詭異,居然都是意外死亡宠漩,警方通過查閱死者的電腦和手機举反,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扒吁,“玉大人火鼻,你說我怎么就攤上這事∈莩拢” “怎么了凝危?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晨逝。 經(jīng)常有香客問我蛾默,道長,這世上最難降的妖魔是什么捉貌? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任支鸡,我火速辦了婚禮,結果婚禮上趁窃,老公的妹妹穿的比我還像新娘牧挣。我一直安慰自己,他們只是感情好醒陆,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布瀑构。 她就那樣靜靜地躺著,像睡著了一般刨摩。 火紅的嫁衣襯著肌膚如雪寺晌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天澡刹,我揣著相機與錄音呻征,去河邊找鬼。 笑死罢浇,一個胖子當著我的面吹牛陆赋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嚷闭,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攒岛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凌受?” 一聲冷哼從身側響起阵子,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胜蛉,沒想到半個月后挠进,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體色乾,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年领突,在試婚紗的時候發(fā)現(xiàn)自己被綠了暖璧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡君旦,死狀恐怖澎办,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情金砍,我是刑警寧澤局蚀,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站恕稠,受9級特大地震影響琅绅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜鹅巍,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一千扶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骆捧,春花似錦澎羞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枫攀,卻和暖如春摆碉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脓豪。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忌卤,地道東北人扫夜。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像驰徊,于是被迫代替她去往敵國和親笤闯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 關于Mongodb的全面總結 MongoDB的內(nèi)部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,928評論 2 89
  • MongoDB 1. MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫棍厂。由 C++ 語言編寫颗味。旨在為 WEB 應用...
    Kevinr閱讀 1,560評論 0 3
  • NoSql數(shù)據(jù)庫優(yōu)缺點 在優(yōu)勢方面主要體現(xiàn)在下面幾點: 簡單的擴展 快速的讀寫 低廉的成本 靈活的數(shù)據(jù)模型 在不足...
    dreamer_lk閱讀 2,718評論 0 6
  • 看到路邊人們翻曬的小麥,不由得感慨萬千牺弹,現(xiàn)在收割麥子一部到位真省勁浦马,在我小時候收割麥子都要忙將近一個月时呀。 我父親是...
    宛茹閱讀 184評論 0 1
  • 回家的感覺非常好,昨晚回家后11點半鐘就睡著了晶默,這幾天出差在外面奔波忙碌中沒有睡好覺谨娜,昨晚一覺睡到早晨6點鐘起來都...
    周秀峰閱讀 175評論 0 1