nosql 因为没有标准的 sql,各有各的操作方式,所以学习成本比较高。实际应用也不会去命令行直接操作,而是用编程语言的 api。
所以我们可以简单了解一下Mongodb,然后用java的Api去操作就行了
没必要花很大功夫在命令行上操作执行
先看看这个简单了解一下我们的Mongodb
【GeekHour】20分钟掌握MongoDB_哔哩哔哩_bilibili
然后看这个教程的15p-20p,来简单在IEDA上用MongoTemplate
15.整合SpringBoot集合操作_哔哩哔哩_bilibili
目录
mongodb应用场景
mongodb和mysql的对比
Mongodb的特点
Mongodb的启动和部署(基本入门)
show database
switched to db XXX
创建集合
insertOne()
ackonwledge
insertedId
查询user里面的数据
insertMany()插入多个数据
limit
sort()排序
skip()
查询level为3的用户
限制返回字段的数目
$gt表示大于,$lt表示小于,$eq表示等于
level:{xxx查询条件}
exist是查询字段是否存在,而不能查询字段的值是否存在
默认会把多个条件组成一个and条件查询
正则表达式
countDocuments()
findOne()
updateOne()
updateMany 更新多个
deleteOne
deleteMany
Java中使用Mongodb
添加文档
Document
id
Field
Transient
编写实体类POJO,对应Mongodb
Mongodb会往集合中添加多一个class属性
插入一条数据save()和insert()
批量插入(注意类型错误)
查询文档
基于Criterial实现
查询
条件查询(Query())
多条件查询Cretial()
query.with()做排序分页和跳过
BasicQuery()传Json
参数名称要对应我们的POJO类
更新文档操作
setOnInsert()
upsert()
getModifiedCount()
updateFirst()
updateMulti()
upsert()
UpdateResult类型
Update类型
删除文档操作
删除所有文档
条件删除
remove()删除
dropCollection
mongodb应用场景
适用于高读写,高并发状态
mongodb和mysql的对比
Mongodb:
是操作文档对象的
collections里面有多个文档
Mongodb的特点
高性能,高可用,高扩展
Mongodb的启动和部署(基本入门)
推荐使用的连接工具
我使用的是mongodb自带的gui可视化工具
左边三个是我们的默认的数据库
三个分别是查询页面,数据库列表和性能监控界面
我们可以在终端输入help来查看我们的帮助文档
show database
test是我们当前默认的数据库
我们可以用show database来展示当前数据库
这是一个特点
只有我们往这个数据库里面插入数据的时候,我们的数据库才会被创建
switched to db XXX
我们这样子来转换我们使用的数据库
创建集合
我们想创建一个用户集合
就是db.users
insertOne()
是我们插入一个文档到这个集合中
ackonwledge
表示是否成功插入
insertedId
表示插入成功后这个用户的Id
这个字段是mongodb自动生成的,它是一个全局的唯一ID
查询user里面的数据
db.users.find()
insertMany()插入多个数据
limit
限制返回的数据
sort()排序
1的话就是升序排序,-1的话就是降序排序
skip()
这里的skip(1),也就是我们跳过我们查询出来的第一个数据
查询level为3的用户
mongodb的数据库类型是非常严格的
我们查询数字3,和查询字符“3”是不同的
限制返回字段的数目
限制返回字段的数目
我们要查询level为3的,然后我们查询到的数据只返回我们的name和email字段
我们的这个_id是自动返回的,我们不想要这个返回,我们就让这个变成0
这样子
$gt表示大于,$lt表示小于,$eq表示等于
level:{xxx查询条件}
in,查询是否存在
{level:{$in:[1,3]}}
exist是查询字段是否存在,而不能查询字段的值是否存在
exist是查询字段是否存在,而不能查询字段的值是否存在
例如我们是exist:1
这个email是null,我们也同样返回了
默认会把多个条件组成一个and条件查询
相同的
正则表达式
忽略大小写,我们就后面加个options然后+个i就可以了
countDocuments()
统计所有的数量
count()也可以加查询条件
findOne()
找一条数据,一般都是返回第一条
updateOne()
如果更新的Mongodb字段不存在的话,我们会默认创建这个字段
updateMany 更新多个
deleteOne
deleteMany
Java中使用Mongodb
下面是我们的配置
首先确保我们的mongodb开启
首先引入Mongodb的起步依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
编写配置文件进行配置
database是指定我们的mongodb的数据库
写个测试类测试一下
我们使用Navicat连接我们的mongodb数据库
成功创建
添加文档
Document
映射mongo中的一条文档数据
(value,collection)指定操作的集合名称
id
映射文档的_Id值
Field
将成员变量映射成文档中的一个key:value对
(name,value)指定文档中key的名称,默认为成员变量名
Transient
避免序列化,指定成员变量不参与文档的序列化
编写实体类POJO,对应Mongodb
我们不需要Mongodb去给我们创建Id,我们自己先传一个Id
Mongodb会往集合中添加多一个class属性
对应java中类的全限定路径,这样做是为了查询时可以把Document类型转换成java类型
插入一条数据save()和insert()
save()
如果存在,那么就修改这条数据insert()
插入,如果存在我们就不能插入,重复插入会抛出异常
批量插入(注意类型错误)
这样子写时错误的
因为我们Mongodb会默认我们的类是List类
所以我们要加多一个Employee.Class
这样就成功批量插入了
查询文档
基于Criterial实现
Cretial.where
可以把多个条件组合在一起
查询
如果我们不往new Query()里面传东西,那么它和findAll()是等同的
findAll,findOne,findById
条件查询(Query())
条件查询就是构建我们的Query()对象
Query()写我们的查询
多条件查询Cretial()
我们的Cretial在我们的Query()里面来使用
Cretial() 是我们的多条件查询 and or,我们要把这个条件放入到我们的Query()里面
query.with()做排序分页和跳过
Sort.by()是根据什么进行排序
然后用Sort()写我们的排序条件
.skip()
.limt()
BasicQuery()传Json
我们还可以直接传我们的Json
然后我们就要使用BasicQuery(),然后把我们写好的Json传进去
其实如果使用Json,就相当于我们在命令行那样执行
参数名称要对应我们的POJO类
我们的name是java层面的,但数据库里面是username
我们有个Field字段,给它映射成username
更新文档操作
setOnInsert()
指定要插入的是id为11的数据
upsert()
没有符合条件的记录就插入数据
getModifiedCount()
updateFirst()
updateMulti()
upsert()
UpdateResult类型
我们update返回的类型是UpdateResult类型
Update类型
使用Update类型弄的对象,来设置我们的更新属性
updateFirst() 更新第一条
updateMulti()更新所有符合条件的
upsert() 有的话就更新,没有的话就插入这个数据
记得,我们的update()方法,要往里面传我们的Update类型
删除文档操作
分为
删除所有文档
条件删除
remove()删除
Query()写我们的条件
remove()用来删除
dropCollection
可以删除整个文档