MongoDB 基本概念
MongoDB 基本概念
MongoDB 数据模型
在 MongoDB 中,多个文档(document)组成集合(collection),多个集合可以组成数据库(database)。
文档(document)
文档是 MongoDB 中数据的基本单元(类似关系型数据库 MySQL 中的行),由字段(field)和值(value)对组成;字段为字符串, 值可以包括其他文档、数组和文档数组。MongoDB 文档类似于 JSON 格式文档。
-
field:必须是字符串,中间不能有空格,不能以 $ 开头( $ 是 MongoDB 特殊符号)
-
_id
:作为 field ,被保留作为主键,它的值在集合中必须唯一,不可变的,可以是除数组之外的任何类型(默认自动生成)(类似关系型数据 MySQL 中的主键) -
. 符号:MongoDB 使用点表示法来访问数组的元素和访问嵌入文档的字段
# 数组 "<array>.<index>" # 嵌套文档 "<embedded document>.<field>"
_id 主键
在 MongoDB 中,存储在集合中的每个文档都需要一个惟一的 _id 字段,它充当文档的主键。如果插入的文档省略了 _id 字段,MongoDB驱动程序会自动为 _id 字段生成一个 ObjectId 对象。
_id 字段具有以下行为和约束 :
- 默认认情况下,MongoDB 创建集合期间在 id 字段上创建一个惟一的索引
- _id 字段总是文档中的第一个字段,如果服务器首先接收到一个没有 _id 字段的文档,那么服务器将把该字段移到开
- _id字段可以包含任何 BSON 数据类型的值(数组除外)
以下是用于存储_id值的常见选项:
- 使用 ObjectId
- 如果可以的话,使用自然唯一标识符
- 生成一个自动递增的数字
- 在应用程序代码中生成 UUID
- 使用驱动程序的 BSON UUID工具来生成 UUID
集合(collection)
MongoDB 将文档存储在集合中,集合就是一组文档(类似关系型数据库 MySQL 中的表)
-
一个集合可以放置任意多个不同的文档(类似于 MySQL 的表可以有任何行)
{"name":"zhangsan"} {"age":23} {"gender":"male"} {"address":"street No.156"}
思考:是否有必要使用多个集合?
答案:如果把各种各样的文档不加区分地放在同一个集合里,无论对开发者还是对管理员来说都将是噩梦。另外,在一个集合中查询特定文档在速度上也很不划算,分开查询多个集合要快得多。
建议把同种类型的文档放在一个集合中,数据会更加集中
-
MongoDB 习惯使用 . 符号分割不同命名空间的子集合,如 blog.posts 和 blog.authors 两个集合名(类似于 Java 的包)
数据库
- 一个 MongoDB 实例可以承载多个数据库(类似于 Redis 一个实例拥有 16 个数据库)
- 每个数据库包含 0 个或者多个集合
- 每个数据库都有独立的权限(建议一个应用程序的所有数据都存储在同一个数据库中)
MongoDB 系统数据库
- admin:这个数据库是 MongoDB 的 root 数据库(可用于添加用户权限,或者查看所有数据库和关闭服务器)
- local:这个数据库是 MongoDB 用于存储所有本地集合(永远不能复制)
- config:这个数据库是 MongoDB 用于分片设置时存储分片信息
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
注:该命令不会显示创建的空数据库