简介
MongoDB是一个开源的,非关系型数据库,是用C++开发的;
官网地址
MongoDB 按照BJSON格式存储数据,比传统的行列更具有表现力,它可以存储多个子集合,也可以存储数组;
- 传统表的列数都是固定的,而MongoDB则不必遵循;
- 传统表的列类型是固定的,而MongoDB可以混合列类型;
- MongoDB也可以指定就校验类型;
MongoDB是文件型数据库,不是文件数据库,它适合存储文件,别的也都可以存储;
概念对比
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持,但它支持子文档查询 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
_id 是主键 ,而不是id/ID需要牢记,多学习一些基础知识减少试错的范围;
特点和功能
高性能、易部署、易使用、存储数据非常方便
- 支持子对象,数组,以及嵌套对象
- 灵活动态的表结构
- 面向集合存储,适合存储对象及JSON形式的数据
- 支持动态查询 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组
- 使用高效的二进制数据存储
- 自动处理碎片
- 支持C#、Java、Python,Js,C++ 驱动比较多
- 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能;
适用场合
- 网站数据:
- 缓存
- 大尺寸、低价值的数据
- 高伸缩的场景:
- 用于对象以及JSON数据的存储:Mongo的BJSON 数据格式非常适合文档化格式的存储以及查询;
实际例子
数据自然,高效,面向对象
eg1:比如一条客户记录,下面是BDocument中展示的样子,
{
"_id": "5cf0029caff5056591b0ce7d",
"firstname": "Jane",
"lastname": "Wu",
"address": {
"street": "1 Circle Rd",
"city": "Los Angeles",
"state": "CA",
"zip": "90404"
},
"hobbies": ["surfing", "coding"]
}
我若用关系型数据库那么我应该建立三个表,当数据过多的时候关联性查询是特别慢的;
面向对象是指:因为对象里面有子对象,对象里面有数组,关系型数据库一行记录就是一个对象;
eg2:比如淘宝数据,建立一个商品,商品有属性,有多规格
比如规格颜色:红,黑,白
比如尺寸:大中小
比如价格:50,100,50,100,50,100,50,100,100
比如库存:
这里特别说明:属性有
eg3:一条主表记录 关联着几条明细表记录
常见问题
- MongoDB不直接支持SQL语句,它有自己的一套查询语法,但是我们可以用Linq