type
status
date
slug
summary
tags
category
icon
password
一、MongoDB简介
- MongoDB 是一个非关系型数据
- 应用场景: 游戏 直播 日志记录
- MongoDB半内存数据库, 可能会有60s间隔数据数据丢失
1、非关系型数据库特点
- 数据模型比较简单.(主要)
- 需要灵活性更强的应用系统
- 对数据库性能要求较高(主要)
- 不需要高度的数据一致性(主要)
- 对于给定key,比较容易映射复杂值的环境
从阿里云 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、 核心概念
6、 数据类型
重点
- 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、 比较运算符
9、 逻辑运算符
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
上。使用这两个注解可标注的字段类型为String
、ObjectId
(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
等于某个值,并且更新时间大于某个值skip
、limit
可用于分页查询,with
、Sort
、Order
可用于排序(多个Order
为组合排序)find
查询集合,findOne
查询一个2、新增
insert
和save
。两者区别如下:- 插入重复数据时:
insert
报DuplicateKeyException
提示主键重复;save
对已存在的数据进行更新。
- 批处理操作时:
insert
可以一次性插入整个数据,效率较高;save
需遍历整个数据,一次插入或更新,效率较低。
3、 删除
可使用映射对象或
Query
对象,使用remove
进行删除。4、 修改
updateFirst
更新一个,updateMulti
更新多个。5、 分页查询(排除某些列)
6、 区别
- Author:Josue
- URL:https://kakarot.cc/article/MongoDB
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!