数据库
🗒️MongDB
00 min
2021-7-2
2024-1-21
type
status
date
slug
summary
tags
category
icon
password

一、MongoDB简介

  • MongoDB 是一个非关系型数据
  • 应用场景: 游戏 直播 日志记录
  • MongoDB半内存数据库, 可能会有60s间隔数据数据丢失

1、非关系型数据库特点

  • 数据模型比较简单.(主要)
  • 需要灵活性更强的应用系统
  • 对数据库性能要求较高(主要)
  • 不需要高度的数据一致性(主要)
  • 对于给定key,比较容易映射复杂值的环境
    • notion image
 
notion image
 
notion image
notion image
notion image
 
 
从阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例。
游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
视频直播,使用 MongoDB 存储用户信息、礼物信息等
日志处理
国内外使用mongodb的公司 facebook 视觉中国、 哲思社区 东方航空公司的机票库存运价系统 台湾最大半导体厂商的产线数据平台 香港顶级银行的金融数据中台 京东 淘宝 ....

2、关系型数据库

  • Oracle
  • MySQL
  • SqlServer
  • DB2

3、NoSQL数据

NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

3.1、 键值数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署
代表: Redis

3.2、 列存储数据库

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。
代表: HBase

3.3、 文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高
代表: MongoDB

3.4、 图形数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API
代表: Neo4J

4、 安装

官网

5、 核心概念

 
notion image

6、 数据类型

 
notion image
notion image
 

重点

  • String(字符串): mongodb中的字符串是UTF-8有效的 Integer(整数): 存储数值。整数可以是32位或64位,具体取决于您的服务器 Boolean(布尔): 存储布尔(true/false)值 Double(双精度): 存储浮点值
  • Arrays(数组): 将数组或列表或多个值存储到⼀个键中 Timestamp(时间戳): 存储时间戳 Object(对象): 嵌⼊式⽂档 Date(⽇期): 以UNIX时间格式存储当前⽇期或时间
  • Null (空值): 存储Null值 Symbol(符号): 与字符串相同,⽤于具有特定符号类型的语⾔
  • Object ID(对象ID) : 存储⽂档ID
  • Binary data(⼆进制数据): 存储⼆进制数据 Code(代码): 将JavaScript代码存储到⽂档中 Regular expression(正则表达式): 存储正则表达式

二、命令操作

1、基本操作

2、 增加

3、更新

4、删除

5、查询

6、 排序

7、 分页

8、 比较运算符

notion image
 

9、 逻辑运算符

notion image
 

10、 模糊查询

三、 SpringBoot集成

1、依赖

2、 配置

3、 去除集合Class列

4、 常用注解

@Document
使用@Document(org.springframework.data.mongodb.core.mapping.Document)标注Java的类名对应的MongoDB的集合名称。
@Id、@MongoId
使用@Id(org.springframework.data.annotation.Id)或@MongoId(低版本依赖可能需升级才有)映射MongoDB_id字段,若没有使用这两个注解,则字段中名称为id的字段将自动映射到_id上。使用这两个注解可标注的字段类型为StringObjectId(org.bson.types.ObjectId)。
@Field
使用@Field(org.springframework.data.mongodb.core.mapping.Field)字段,将Java类中字段名称与MongoDB集合中字段名称不一致的字段映射成一致的。如Java中使用了驼峰命名的startTs字段,想要映射成MongoDB中的start_ts字段就可以使用@Field完成。
@Transient
使用@Transient(org.springframework.data.annotation.Transient)标注该字段不持久化至数据库中。

5、 示例

MongoRepository

这是自定义的可用 Mapper接口支持自定义 findByXxx 分页
Spring Data命名规则
关键字
方法命名
sql where字句
And
findByNameAndPwd
where name= ? and pwd =?
Or
findByNameOrSex
where name= ? or sex=?
Is,Equals
findById,findByIdEquals
where id= ?
Between
findByIdBetween
where id between ? and ?
LessThan
findByIdLessThan
where id < ?
LessThanEquals
findByIdLessThanEquals
where id <= ?
GreaterThan
findByIdGreaterThan
where id > ?
GreaterThanEquals
findByIdGreaterThanEquals
where id > = ?
After
findByIdAfter
where id > ?
Before
findByIdBefore
where id < ?
IsNull
findByNameIsNull
where name is null
isNotNull,NotNull
findByNameNotNull
where name is not null
Like
findByNameLike
where name like ?
NotLike
findByNameNotLike
where name not like ?
StartingWith
findByNameStartingWith
where name like '?%'
EndingWith
findByNameEndingWith
where name like '%?'
Containing
findByNameContaining
where name like '%?%'
OrderBy
findByIdOrderByXDesc
where id=? order by x desc
Not
findByNameNot
where name <> ?
In
findByIdIn(Collection<?> c)
where id in (?)
NotIn
findByNameNot
where name <> ?
True
findByAaaTue
where aaa = true
False
findByAaaFalse
where aaa = false
IgnoreCase
findByNameIgnoreCase
where UPPER(name)=UPPER(?)忽略大小写
top
findTop100
top 10/where ROWNUM <=10
补充: existisByXXX,结构与findBy类似,返回Boolean值,判断数据是否存在。

6、MongoTemplate

1、查询

使用Query构建查询条件
_id等于具体值
status等于某个值,并且更新时间大于某个值
skiplimit可用于分页查询,withSortOrder可用于排序(多个Order为组合排序)
find查询集合,findOne查询一个

2、新增

insertsave。两者区别如下:
  • 插入重复数据时:insertDuplicateKeyException提示主键重复;save对已存在的数据进行更新。
  • 批处理操作时:insert可以一次性插入整个数据,效率较高;save需遍历整个数据,一次插入或更新,效率较低。

3、 删除

可使用映射对象或Query对象,使用remove进行删除。

4、 修改

updateFirst更新一个,updateMulti更新多个。

5、 分页查询(排除某些列)

notion image
 

6、 区别

 
上一篇
Git 443: Timed out
下一篇
MySQL-2