MongoDB的引出
使用Redis技术可以有效的提高数据访问速度,但是由于Redis的数据格式单一性,无法操作结构化数据,当操作对象型的数据时,Redis就显得捉襟见肘。在保障访问速度的情况下,如果想操作结构化数据,看来Redis无法满足要求了,此时需要使用全新的数据存储结束来解决此问题,即MongoDB技术。
MongoDB简介
-
MongoDB是一个开源、高性能、无模式 的文档型数据库,它是
NoSQL数据库
产品中的一种,是最像关系型数据库的非关系型数据库。- 无模式:简单说就是作为一款数据库,没有固定的数据存储结构,第一条数据可能有A、B、C一共3个字段,第二条数据可能有D、E、F也是3个字段,第三条数据可能是A、C、E3个字段,也就是说数据的结构不固定,这就是无模式
-
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它支持的数据结构非常松散,是类似json的
bson格式
,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。- bson:是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。它是一种二进制表示形式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以及MongoDB中的各种数据类型。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)
MongoDB常见应用场景
- MongoDB一般都会和数据库结合使用,永久性存储与临时存储相结合,适用于修改次数较多的数据使用。
- 游戏装备数据、游戏道具数据
- 存储位置:数据库、Mongodb
- 特征:永久性存储与临时存储相结合、修改频度较高
- 直播数据、打赏数据、粉丝数据
- 存储位置:数据库、Mongodb
- 特征:永久性存储与临时存储相结合,修改频度极高
- 物联网数据
- 存储位置:Mongodb
- 特征:临时存储,修改频度飞速
- 游戏装备数据、游戏道具数据
MongoDB的下载
-
windows版安装包下载地址:https://www.mongodb.com/try/download
- 下载的安装包也有两种形式,一种是一键安装的msi文件,还有一种是解压缩就能使用的zip文件,哪种形式都行
-
zip解压:
-
- 把压缩文件放置一个目录下,然后解压缩完毕后会得到如下文件,其中bin目录包含了所有mongodb的可执行命令
- 把压缩文件放置一个目录下,然后解压缩完毕后会得到如下文件,其中bin目录包含了所有mongodb的可执行命令
-
- mongodb在运行时需要指定一个数据存储的目录,所以创建一个数据存储目录,通常放置在安装目录中,此处创建data的目录用来存储数据,然后在data目录里面再创建一个db目录,用来存储mongodb运行时产生(呈现)的数据文件。具体如下:
- mongodb在运行时需要指定一个数据存储的目录,所以创建一个数据存储目录,通常放置在安装目录中,此处创建data的目录用来存储数据,然后在data目录里面再创建一个db目录,用来存储mongodb运行时产生(呈现)的数据文件。具体如下:
-
- 启动服务器:进入bin目录里面,然后在该目录下输入cmd进入命令行,然后执行下面的命令。
-
mongod --dbpath=..\data\db
启动服务器时需要指定数据存储位置,通过参数–dbpath进行设置,可以根据需要自行设置数据存储路径。默认服务端口27017。
***然后启动客户端:***进入bin目录里面,然后在该目录下输入cmd进入命令行,然后执行下面的命令,就可以操作mongo数据库了。
mongo --host=127.0.0.1 --port=27017--host 和--port都是默认的数据。
- MongoDB虽然是一款数据库,但是它的操作并不是使用SQL语句进行的,因此操作方式比较陌生,为此我们一般使用一些类似于Navicat的数据库客户端软件,能够便捷的操作MongoDB,先安装一个客户端,再来操作MongoDB。
- 这里介绍使用Robot3t,Robot3t是一款绿色软件,无需安装,解压缩即可。解压缩完毕后进入安装目录双击robot3t.exe即可使用。
注意,使用mongodb客户端软件之前,记得启动mongodb服务器。
创建数据库:在左侧菜单中使用右键创建,输入数据库名称即可
创建集合:在Collections上使用右键创建,输入集合名称即可,集合等同于数据库中的表的作用
- 这里介绍使用Robot3t,Robot3t是一款绿色软件,无需安装,解压缩即可。解压缩完毕后进入安装目录双击robot3t.exe即可使用。
mongodb数据库操作
显示所有的数据库:show dbs、show databases
显示当前所在的数据库:db
选择和创建数据库:use 数据库名称
删除当前数据库:db.dropDatabase()
mongodb集合操作
-
新增集合:
- 显示新增:db.createCollection(name)
- 隐式新增:通过插入文档数据来默认创建,db.collection.insert({id:1,name:knife});
-
显示数据库中所有的集合:show tables、show collections
-
删除当前集合:db.collection.drop()
- 清空一个集合(效率低,直接删集合更快):db.collection.remove({})
mongodb文档操作(文档是一种类似json格式的数据,初学者可以先把数据理解为就是json数据)
- 新增文档:
新增一个文档:db.集合名称.insert/save/insertOne(文档) ; => 单文档插入db.collection.insertMany(文档): =>多文档插入db.collection.insert(文档): =>单、多文档插入例子:db.collection.insert({k1:v1,k2:v2, ......})
db.knife.insertOne({id:1,name:"jack",city:"广州",age:20})集合名称:knife文档:{id:1,name:"jack",city:"广州",age:20}
- 删除文档:
db.集合名称.remove(条件)例子:deleteOne删除id=2的文档
db.knife.deleteOne({id:2})
- 修改文档:
db.集合名称.update(条件,{操作种类:{文档}})
- 查询文档:
基础查询:查询全部: db.集合.find();查第一条: db.集合.findOne()查询指定数量文档: db.集合.find().limit(10) //查10条文档跳过指定数量文档: db.集合.find().skip(20) //跳过20条文档统计: db.集合.count()排序: db.集合.sort({age:1}) //按age升序排序投影: db.集合名称.find(条件,{name:1,age:1}) //仅保留name与age域条件查询:基本格式: db.集合.find({条件})模糊查询: db.集合.find({域名:/正则表达式/}) //等同SQL中的like,比like强大,可以执行正则所有规则条件比较运算: db.集合.find({域名:{$gt:值}}) //等同SQL中的数值比较操作,例如:name>18包含查询: db.集合.find({域名:{$in:[值1,值2]}}) //等同于SQL中的in条件连接查询: db.集合.find({$and:[{条件1},{条件2}]}) //等同于SQL中的and、or
springboot整合mongodb
- 使用springboot整合MongDB该如何进行呢?其实springboot为什么使用的开发者这么多,就是因为他的套路几乎完全一样。导入坐标,做配置,使用API接口操作。整合Redis如此,整合MongoDB同样如此。(熟悉的的三板斧)
- 第一,先导入对应技术的整合starter坐标
- 第二,配置必要信息
- 第三,使用提供的API(接口啊,类啊等等的)操作即可
下面就开始springboot整合MongoDB,操作步骤如下:
步骤①:导入springboot整合MongoDB的starter坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
上述坐标也可以在创建模块的时候通过勾选的形式进行选择,同样归属NoSQL分类中
步骤②:进行基础配置
spring:data:mongodb:uri: mongodb://localhost/knife
# localhost是本机地址,然后后面的knife是数据库名称
# 如果这里配置的数据库名称是不存在的,那么它在使用的时候,会默认帮你创建这个数据库。
操作MongoDB需要的配置与操作redis一样,最基本的信息都是操作哪一台服务器,区别就是连接的服务器IP地址和端口不同,书写格式不同而已。
步骤③:使用springboot整合MongoDB的专用客户端接口MongoTemplate来进行操作(这里只是调用MongoTemplate两个比较简单的方法)
@SpringBootTest
class SpringbootMongodbApplicationTests {@Autowiredprivate MongoTemplate mongoTemplate;@Testvoid contextLoads() {Book book = new Book();book.setId(2);book.setName("springboot2");book.setType("springboot2");book.setDescription("springboot2");
//向数据里面添加一个文档(可以理解为mysql里面添加一条数据)mongoTemplate.save(book);}@Testvoid find(){//查询方法List<Book> all = mongoTemplate.findAll(Book.class);System.out.println(all);}
}