MongoDB
应用场景
- 社交场景。使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能。
- 游戏场景。使用MongoDB存储游戏用户信息,用户装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问。
- 物流场景。使用MongoDB存储订单信息,订单状态再运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
- 物联网场景。使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度分析。
- 视频直播。使用MongoDB存储用户信息,点赞互动信息等。
什么时候使用MongoDB
- 应用不需要事务和复杂join。
- 数据模型无法确定。
- 读写比较频繁
- 应用需要TB甚至PB级别存储。
简介
开源,高性能,无模式,NoSQL。
数据结构松散,类似于JSON的BSON。
记录是一个文档,是一个由字段和值(field:value)组成的数据结构。
术语
- 数据库 database
- 集合 collection 相当于MySQL中的表
- 文档 document 相当于MySQL中的列
- 域 field
- 索引 index
- 主键 primary key ,MongoDB自动将_id设置为主键
MongoDB 不支持表连接,通过嵌入式文档来代替多表连接。
下载与安装
下载zip包,解压目录中新建config文件夹和数据存放目录data文件夹,该文件夹中新建配置文件mongod.conf,内容参考如下:
storage:
dbPath: D:\software\mongodb-win32-x86_64-windows-5.0.2\data
启动命令
mongod -f ../config/mongod.conf
或
mongod --config ../config/mongod.conf
启动默认创建三个库
- admin 存放一些权限和用户数据。
- local 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
- config 当Mongo用于分片设置时,config数据在内部使用,用于保存分片的相关信息。
使用compass客户端连接
常用命令
- mongo --host=192.168.3.53 --port=17017
- show dbs
- db.dropDatabase() 主要用来删除已经持久化的数据库
- db.createCollection(“my”) 显示创建集合
- show collections 查询所有集合
- db.集合.drop()
- db.comment.insert({}) 插入数据,如果没有comment集合,就会隐式创建
- db.comment.find() 查询集合数据
- db.comment.insertMany([]) 批量插入数据
- db.comment.find({articleid:100001}) 可以加入参数,条件查询articleid为100001的数据
- db.comment.findOne({articleid:100001}) 条件查询articleid为100001的数据,并筛选第一条
- db.comment.find({articleid:100001},{articleid:1}) 条件查询articleid为100001的数据,并取第一条
可以通过try…catch的方式进行批量插入。
- db.comment.update({_id:“1”},{likenum:NumberInt(1001)}) 覆盖修改
- db.comment.update($set:{likenum:NumberInt(889)}) 局部修改
- db.comment.update({userid:“1003”},{$set:{nickname:“凯撒2”}}) 批量修改,默认只修改第一条数据
- db.comment.update({userid:“1003”},{$set:{nickname:“凯撒大帝”}},{multi:true}) 批量修改,修改所有符合条件的数据
- db.comment.remove({_id:“3”}) 删除集合中 id 为3的文档
- db.comment.count({条件}) 统计查询
索引
B-Tree ,MySQL是B+Tree
- 单字段索引
- 复合索引
- 地理空间索引
- 文本索引
- 哈希索引
Springboot集成MongoDB
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
使用这个依赖,提供了基本的增删改成方法。使用方式和JPA类似。