6.2 整合MongoDB

6.2 整合MongoDB

  • [1. MongoDB简介](#1. MongoDB简介)
  • [2. MongoDB安装](#2. MongoDB安装)
    • [2.1 下载](#2.1 下载)
    • [2.2 配置MongoDB](#2.2 配置MongoDB)
    • [2.3 MongoDB的启动和关闭](#2.3 MongoDB的启动和关闭)
      • [1. 启动MongoDB](#1. 启动MongoDB)
      • [2. 关闭MogoDB](#2. 关闭MogoDB)
    • [2.4 安全管理](#2.4 安全管理)
  • [3. 整合SpringBoot](#3. 整合SpringBoot)
    • [3.1 依赖](#3.1 依赖)
    • [3.2 MongoTemplate使用](#3.2 MongoTemplate使用)
    • [3.3 测试](#3.3 测试)
      • [1. 新增](#1. 新增)
      • [2. 查询](#2. 查询)
      • [3. 删除](#3. 删除)
  • *****************************************************************************

1. MongoDB简介

MongoDB是一种面向文档的数据库管理系统 ,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB功能丰富,它支持一种类似JSON的BSON数据格式既可以存储简单的数据格式,也可以存储复杂的数据类型

MongoDB最大的特点是它支持的查询语言非常强大,并且还支持对数据建立索引。总体来说,MongoDB是一款应用相当广泛的NoSQL数据库。

2. MongoDB安装

本案例使用的MongoDB版本为写作本书时的最新版本4.0.0,安装环境为CentOS 7。安装步骤如下。

2.1 下载

java 复制代码
//1.下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
java 复制代码
//2.解压
tar -zxvf mongodb-linux-x86_64-4.0.0.tgz
//3.重命名
mv mongodb-linux-x86_64-4.0.0 mongodb

2.2 配置MongoDB

进入mongodb目录下,创建两个文件夹db和logs,分别用来保存数据和日志,代码如下:

java 复制代码
cd mongodb
mkdir db
mkdir logs

然后进入bin目录下,创建一个新的MongoDB配置文件mongo.conf,文件内容如下:

java 复制代码
dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log port=27017
fork=true

配置解释:

  • 第1行配置表示数据存储目录。
  • 第2行配置表示日志文件位置。
  • 第3行配置表示启动端口。
  • 第4行配置表示以守护程序的方式启动MongoDB,即允许MongoDB在后台运行。

2.3 MongoDB的启动和关闭

1. 启动MongoDB

配置完成后,还是在bin目录下,运行如下命令启动MongoDB:

java 复制代码
./mongod -f mongo.conf --bind_ip_all

-f 表示指定配置文件的位置,--bind_ip_all则表示允许所有的远程地址连接该MongoDB实例。

MongoDB启动成功后,在bin目录下再执行mongo命令,进入MongoDB控制台 ,然后输入db.version(),如果能看到MongoDB的版本号,就表示安装成功:

java 复制代码
./mongo
db.version()

2. 关闭MogoDB

默认情况下,启动后连接的是MogoDB中的test库,而关闭MongoDB的命令需要在admin 库中执行,因此关闭MongoDB需要首先切换到admin库,然后执行db.shutdownServer();命令,完整操作步骤如下:

java 复制代码
use admin;
db.shutdownServer();
exit

服务关闭后,执行exit命令退出控制台,此时如果再执行./mongo命令就会执行失败,如图6-14 所示。

2.4 安全管理

默认情况下,启动的MongoDB没有登录密码,在生产环境中这是非常不安全的,但是不同于MySQL、Oracle等关系型数据库,MongoDB中每一个库都有独立的密码,在哪一个库中创建用户就要在哪一个库中验证密码。

要配置密码,首先要创建一个用户,例如在admin库中创建一个用户,代码如下:

java 复制代码
use admin;
db.createUser({user:"admin",pwd:"Abc1234%",roles:[{role:"readWrite",db:"test"}]})

新创建的用户名为admin,密码是Abc1234%,roles表示该用户具有的角色,这里的配置表示该用户对test库具有读和写两项权限。

用户创建成功后,关闭当前实例

java 复制代码
db.shutdownServer();
exit

然后重新启动,启动命令如下:

java 复制代码
./mongod -f mongo.conf --bind_ip_all

启动成功后,再次进入控制台,然后切换到admin库中验证登录(默认连接上的库是test库),验证成功后就可以对test库执行读写操作了,代码如下:

java 复制代码
./mongo
db.auth("admin","Abc1234%")

如果db.auth("admin","Abc1234%")命令执行结果为1,就表示认证成功,可以执行对test库的读写操作。

3. 整合SpringBoot

借助于SpringData MongoDB,SpringBoot为MongoDB也提供了开箱即用的自动化配置方案,具体配置步骤如下。

3.1 依赖

java 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

3.2 MongoTemplate使用

java 复制代码
import com.mongodb.client.result.DeleteResult;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.domain.MdbBook;
import com.ruoyi.system.service.MdbService;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class MdbServiceImpl implements MdbService {
    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 根据作者查询书籍信息
     *
     * @param author
     * @return
     */
    @Override
    public List<MdbBook> findByAuthorContains(String author) {
        Query query = new Query();
        query.addCriteria(Criteria.where("author").is(author));
        return mongoTemplate.find(query, MdbBook.class, "book");
    }

    /**
     * 根据Id查询
     *
     * @param id
     * @return
     */
    @Override
    public MdbBook findById(String id) {
        return mongoTemplate.findById(id, MdbBook.class);
    }

    /**
     * 新增book
     *
     * @param book
     */
    @Override
    public void insertBook(MdbBook book) {
        book.setId(IdUtils.simpleUUID());
        mongoTemplate.insert(book, "book");
    }

    /**
     * id删除
     *
     * @param id
     */
    @Override
    public void delBookById(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(id));
        mongoTemplate.remove(query, "book");
    }
}

3.3 测试

1. 新增


2. 查询


3. 删除


删除朝花夕拾

*****************************************************************************

相关推荐
Kk.61625 分钟前
SQL编程题复习(24/9/20)
数据库·sql·pta考试·专本贯通
Yz987638 分钟前
Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner
大数据·数据库·数据仓库·hadoop·mapreduce·big data
加油=^_^=1 小时前
MySQL基础篇的补充
数据库·python·mysql
porkczr1 小时前
oracle rac多个实例就相当于多个数据库系统程序
数据库·oracle
大白菜和MySQL2 小时前
mysql mha高可用集群搭建
数据库·mysql
QQ爱剪辑2 小时前
MySQL基础(13)- MySQL数据类型
数据库·mysql
后端小张3 小时前
Redis 执行 Lua,能保证原子性吗?
数据库·redis·缓存
离开地球表面_993 小时前
索引失效?查询结果不正确?原来都是隐式转换惹的祸
数据库·后端·mysql
lipviolet3 小时前
Redis系列---Redission分布式锁
数据库·redis·分布式
Zhen (Evan) Wang3 小时前
.NET 6 API + Dapper + SQL Server 2014
数据库·c#·.net