【Java后端】Mongodb学习笔记(完整详细版)

一、介绍

在介绍MongoDB之前首先介绍NoSQL非关系型数据库:通常用于关联较少且大规模的数据,其分类主要如下

类型实例
文档型数据库MongoDB
键值对数据库Redis、Voldemort、Scalaris
列存储数据库Sybase IQ、Vertica
图存储数据库Neo4j、FlockDB、GraphDB

MongoDB是一种面向文档半结构化非关系型数据库,所谓的面向文档是一种类似JSON的结构称为BSON,因此可以简单理解MongoDB存储的是各种各样的JSON

MongoDB可以快速开发web型应用,因为存储的是BSON格式,因此无需像关系型数据库那样需要建表,非常的的灵活

二、安装部署

进入MongoDB官网 MongoDB Community Download | MongoDB

官网会根据你的电脑型号推荐最适合的MongoDB版本,Package选择msi就好了,因为相比于zip格式,msi是傻瓜模式,很多的基础配置自动帮你配置好,因此进入该官网只需要点击Download即可

在data目录中创建db文件夹 

cmd终端配置数据库地址

mongod --dbpath E:\Mongodb\data\db

将Mongodb中的bin文件夹设置于环境变量中

 在bin同级目录下创建mongodb.config文件,并在文件中配置日志和数据库存储路径信息

  在bin目录中配置MongoDB启动关闭

mongod -dbpath "E:\Mongodb\data\db" -logpath "E:\Mongodb\log\mongo.log" -install -serviceName "MongoDB"

 测试启动(注意一定要用管理员启动)

 进入测试网站127.0.0.1:27017 ,如果出现以下内容则表示MongoDB启动成功

使用Navicat数据库管理工具创建自己的MongoDB数据库并进行连接

关闭服务器

三、基础知识

3.1 基本概念

下面表格对比了关系型数据库MySQL和非关系型数据库MongoDB

MySQLMongoDBInterpret
databasedatabase数据库
tablecollectionMysql称为表,MongoDB称为集合
rowdocumentMysql称为数据行,MongoDB称为数据文档
columnfieldMysql称为数据列,MongoDB称为字段
primary keyprimarykey主键

注意

1创建文档的时候可以不用预先创建数据库和集合,因为系统会自动创建

2 主键会自动创建维护,名字为  _id

3.2 数据类型

MongoDB支持以下的数据类型

数据类型 解释
String(字符串)mongodb中的字符串是UTF-8有效的
Integer整数存储数值。整数可以是32位或64位,具体取决于您的服务器
Boolean(布尔)存储布尔(true/false)值
Double(双精度存储浮点值
Object对象嵌入式文档
Date(日期以UNIX时间格式存储当前日期或时间
Arrays(数组将数组或列表或多个值存储到一个键中
Code(代码将JavaScript代码存储到文档中
Regular expression正则表达式存储正则表达式
Binary data(二进制数据存储二进制数据
Object ID(对象ID存储文档ID
Symbol(符号与字符串相同,用于具有特定符号类型的语言
Null (空值)存储Null值
imestamp(时间戳存储时间戳
Min/ Max keys(最小/最大键将值与最低和最高BSON元素进行比较

3.3  基本操作

操作作用
mongo连接数据库
db查看当前操作的数据库
use ***切换到指定数据库
show databases查看所有的数据库
show collections查看当前数据库中的所有集合

四、CRUD

4.1 增加文档

db为操作的数据库,collection为操作的集合

一般我们都使用万能插入

操作语句
增加一条数据db.collectionName.insertOne({name:'老大'})
增加多条数据db.collectionName.insertMany([{name:'老大'},{name:'老二'}])
万能插入

db.collectionName.insert({name:'老三'}) 

db.collectionName.insert({name:'老四'},{name:'老五'})

// 插入一条数据
db.user.insertOne({
name:String('老大'),age:14,}
)

// 插入多条数据
db.user.insertMany([
{name:String('老三'),age:12,},
{name:String('老四'),age:11,}
])

4.2 删除文档

操作语句
删除一个文档db.collectionName.deleteOne(条件)
删除所有文档db.collectionName.deleteMany(条件)
万能删除db.collectionName.remove(条件)
// 删除一条年龄14岁的小伙伴,数据表中最早创建的数据
db.user.deleteOne({age:14})

4.3 修改文档

操作语句
修改一个文档db.collectionName.update(条件,修改)
修改多个文档db.collectionName.updateOne(条件,修改)
万能修改db.collectionName.updateMany(条件,修改)
// 单个修改,将老大年龄修改为15
db.user.updateOne({name:'老大'},{$set:{age:15}})

4.4 查询文档

操作语句
查询所有文档

db.collectionName.find()

db.collectionName.find({})

条件查询db.collentionName.find({条件})
条件查询对象第一个db.collentionName.findOne({条件})
// 查询user集合全体数据
db.user.find()

// 查询老大信息
db.user.find({name:'老大'})

// 查询所有14岁的好兄弟,并返回第一条查询的结果
db.user.findOne({age:14})

五、SpringBoot集成 

我们需要在依赖中导入spring-data-mongodb,其主要提供了MongoTemplateMongoRepository两种方式来访问Mongodb,前者功能强大,后者操作简单

5.1 环境配置

配置xml文件

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置application.properties文件

格式:mongodb://用户名:用户密码@主机地址:27017/数据库名?

spring.data.mongodb.uri:mongodb://root:123456@localhost:27017/mongodbdemo?maxIdleTimeMS=86400000

5.2 基于MongoRepository实现CRUD

只需要接口继承MongoRepository即可使用其内置的各种方法。但是要注意定义名要符合Restful风格。类似于Mybatis-plus和JPA

@Repository
public interface UserMapper extends MongoRepository<User,String> {

    User getUserByUsername(String username);

}

5.3 基于MongoTemplate实现CRUD

一般是当业务非常复杂时,内置的MongoRepository方法难以实现时才使用该方法,该方式需要写Mapper接口以及MapperImpl实现类。

在MapperImpl中使用的查询语句是使用Templat中的语法。

因此直观的来讲,要想完成一个业务有两种方法,第一种是在业务方法中调用多个使用MongoRepository的Mapper方法,另一种方法是一个业务调用少量功能十分强大的MongoTemplate方法

public interface UserMa {

    void deleteById(String userName);

}
Repository
public class UserMapperImpl implements UserMapper {

    @Autowired
    private MongoTemplate template;


    @Override
    public void deleteById(String userName) {
        Query query = new Query();
        query.addCriteria(Criteria.where("userName").is(userName));
        template.remove(query, NewUser.class);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北村南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值