MongoDB的下载与安装以及与SpringBoot进行集成

MongoDB简介

MongoDB是由 C++的一个基于分布式文件存储的数据库,为 WEB 应用提供可扩展的高性能数据存储解决方案。支持的数据结构非常松散,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,不需要知道任何结构定义,完全可以把不同结构的文件存储在同一个数据库里。所以说MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Github地址:https://github.com/mongodb/mongo
官方网站:https://www.mongodb.com/
官方文档:https://docs.mongodb.com/
中文社区:http://www.mongoing.com/

文件数据库

MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。

image.png

MongoDB主要特点:

1.高性能:对嵌入式数据模型的支持,减少了对数据库IO操作。索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。
2.丰富的查询语言:MongoDB支持丰富的查询语言以支持读写操作(CRUD)以及数据聚合文本搜索空间查询
3.高可用性:MongoDB的拷贝工具称为副本集,副本集就是通过部署多个mongod实例构成的一个集群,这个集群中的mongod之间有主从关系。提供了数据复制冗余和通过选举机制实现自动故障转移
4.水平可伸缩性:MongoDB提供了分片集群部署模式,在分片集群部署中,每个分片负责保存一部分数据,对于每个分片,仍然可以采用副本集的方式,通过复制冗余的方式,保证这部分数据的高可用性。从3.4版本开始,MongoDB支持基于分片创建数据区域。在集群中,MongoDB仅将区域覆盖的读取和写入指向区域内的分片。
5.MongoDB支持多个存储引擎
WiredTiger(默认存储引擎):非常适合大多数工作负载,提供文档级并发模型,检查点和压缩等功能,还支持静态加密。
内存存储引擎:它不是将文档存储在磁盘上,而是将它们保留在内存中,以实现更可预测的数据延迟。
MMAPv1:是MongoDB 3.0及更早版本的默认存储引擎,现不推荐使用

下载社区版

下载地址:https://www.mongodb.com/download-center/community
推荐下载安装版,可以直接安装配置为系统服务

image.png

安装步骤

1.Next
image.png
2.接受,next
image.png
3.如果不想把软件装在系统盘,就选择Custom,然后Next
image.png
4.选择安装路径,next
image.png
5.从 MongoDB 4.0 开始,可以在安装期间配置 MongoDB 作为服务,不需要像以前版本那样输入一堆命令来将 MongoDB 配置成 Windows 服务来自动运行。
image.png

网络服务用户: Windows 内置的 Windows 用户帐户
本地或域用户:
对于现有本地用户帐户,Account Domain 指定为.,并为该用户指定 Account NameAccount Password
对于现有域用户,指定 Account DomainAccount NameAccount Password
Service Name:也就是Windows 服务的服务名,如果你已有指定名称的服务,则必须选择其他名称。
Data Directory:数据保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限
Log Directory:日志保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限

6.不要勾选 Install MongoDB Compass,貌似勾选安装MongoDB Compass的话会很慢,这个不影响使用
7.开始安装
image.png

启动

安装完启动会发现启动失败,先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;
    }
}
两种方式实现DAO层

1.实现MongoRepository统一接口操作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>

不难发现最后有继承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连接数据库,默认情况下连接的是test数据库
spring.data.mongodb.hostMongoDB服务器地址,默认localhost
spring.data.mongodb.port 端口,默认 27017
spring.data.mongodb.uriMongoDB的uri,多用于集群,默认mongodb://localhost/test,多数据源用,分隔

启动测试

image.png

Navicat中看到存入的数据,_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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,938评论 2 89
  • MongoDB 1. MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用...
    Kevinr阅读 1,566评论 0 3
  • NoSql数据库优缺点 在优势方面主要体现在下面几点: 简单的扩展 快速的读写 低廉的成本 灵活的数据模型 在不足...
    dreamer_lk阅读 2,730评论 0 6
  • 看到路边人们翻晒的小麦,不由得感慨万千,现在收割麦子一部到位真省劲,在我小时候收割麦子都要忙将近一个月。 我父亲是...
    宛茹阅读 184评论 0 1
  • 回家的感觉非常好,昨晚回家后11点半钟就睡着了,这几天出差在外面奔波忙碌中没有睡好觉,昨晚一觉睡到早晨6点钟起来都...
    周秀峰阅读 176评论 0 1