MongoDB 基础概念
db
:和mysql
的概念一致collection
:集合,类似于mysql
中的表document
:每个集合中的文档,类似于mysql
中的记录
Primary Key
:和mysql
中的主键含义一致,每个document
都有一个主键field
:文档中的字段
数据库 db
MongoDB 中默认的数据库为 test ,如果没有创建新的数据库,集合将存放在 test 数据库中;
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:
- admin:从权限的角度来看,这是
root
数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器;- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合;
- config:当 Mongo 用于分片设置时,config 数据库在内部使用,用于保存分片的相关信息;
数据库名称的规则
不区分大小写,但是建议全部小写;不能包含空字符;数据库名称不能为空,并且必须少于 64 个字符;
Windows 上的命名限制:不能包括
/\. "$*<>:|?
中的任何内容;Unix 和 Linux 上的命名限制:不能包括
/\. "$
中的任何字符;
删除数据库
使用 use 命令切换到要删除的数据库;
使用 db.dropDatabase() 删除当前数据库;
集合 collection
集合名称的规则
集合名称应以下划线或字母字符开头;
不能包含 $;不能为空字符串;不能包含空字符;不能以 . 开头;
长度限制;
- 版本 4.2 最大 120 个字节;
- 版本 4.4 最大 255 个字节;
查看集合
show collections
删除集合
db.集合名称.drop()
文档 document
MongoDB 将数据记录存储为 BSON 文档,是 JSON 文档的二进制表示形式,它比 JSON 包含更多的数据类型;
文档结构
-
MongoDB 文档由字段和值对组成,并具有以下结构
{ field1: value1, field2: value2, field3: value3, ... fieldN: valueN }
-
文档与文档之间的数据结构可以不同
字段名称有以下限制
字段名称 _id 保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型;
字段名称不能包含空字符;顶级字段名称不能以美元符号 $ 开头;
从 MongoDB 3.6 开始,服务器允许存储包含点 . 和美元符号 $ 的字段名称;
MongoDB 中的数据类型
-
字段的值可以是任何 BSON 数据类型,包括其他文档,数组和文档数组。例如,以下文档包含各种类型的值:
var mydoc = { // _id 保存一个 ObjectId 类型 _id: ObjectId("5099803df3f4948bd2f98391"), // name 包含一个嵌入式文档,该文档包含 first 和 last 字段 name: { first: "Alan", last: "Turing" }, // birth 和 death 持有 Date 类型的值 birth: new Date('Jun 23, 1912'), death: new Date('Jun 07, 1954'), // contribs 保存一个字符串数组 contribs: ["Turing machine", "Turing test", "Turingery"], // views 拥有 NumberLong 类型的值 views: NumberLong(1250000) }
-
下面是 MongoDB 支持的常用数据类型:
类型 整数标识符 字符串标识符 描述 Double 1 double 双精度浮点值,用于存储浮点值; String 2 string UTF-8 编码的字符串,存储数据常用的数据类型; Object 3 object 用于内嵌文档; Array 4 array 用于将数组或列表或多个值存储为一个键; Binary data 5 binData 二进制数据,用于存储二进制数据; ObjectId 7 objectId 对象 ID,用于创建文档的 ID; Boolean 8 bool 布尔值,用于存储布尔值(真/假); Date 9 date 日期时间,用 UNIX 时间格式来存储当前日期或时间; Null 10 null 用于创建空值; Regular Expression 11 regex 正则表达式类型,用于存储正则表达式; 32-bit integer 16 int 整型数值,用于存储 32 位整型数值; Timestamp 17 timestamp 时间戳,记录文档修改或添加的具体时间; 64-bit integer 18 long 整型数值,用于存储 64 位整型数值; Decimal128 19 decimal 数值类型,常用于存储更精确的数字,例如货币;
_id 字段
-
在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键,如果插入的文档省略 _id 字段,则 MongoDB 驱动程序会自动为 _id 字段生成 ObjectId;
-
_id 字段具有以下行为和约束:
- 默认情况下 MongoDB 在创建集合时会在 _id 字段上创建唯一索引;
- _id 字段始终是文档中的第一个字段;
- _id 字段可以包含任何 BSON 数据类型的值,除了数组;
MongoDB 的特点
mongodb
属于nosql
中的文档型数据库,每个文档相当于是一个对象,它没有列的概念,也没有表关系由于它是一个
nosql
数据库:
- 无
sql
语句- 使用极其简单,学习成本非常低
- 由于没有集合之间的关联,难以表达复杂的数据关系
- 存取速度极快
由于它是一个
文档型
数据库:
- 数据内容非常丰富和灵活
- 对数据结构难以进行有效的限制
MongoDB 适用于哪些场景?
-
需要处理大量的低价值数据,且对数据处理性能有较高要求
:比如,对微博数据的处理就不需要太高的事务性,但是对数据的存取性能有很高的要求,这时就非常适合使用 MongoDB; -
需要借助缓存层来处理数据
:因为 MongoDB 能高效的处理数据,所以非常适合作为缓存层来使用,将 MongoDB 作为持久化缓存层,可以避免底层存储的资源过载; -
需要高度的伸缩性
:对关系型数据库而言,当表的大小达到一定数量级后,其性能会急剧下降,这时可以使用多台 MongoDB 服务器搭建一个集群环境,实现最大程度的扩展,且不影响性能;
MongoDB👉 NoSQL 简介
上一篇