MongoDB文档与集合 - morris131/morris-book GitHub Wiki
下表是将SQL中的概念与Mongo中的一些概念的对照:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | embedded documents/reference | 表连接/内嵌文档,表连接 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
文档是MongoDB最核心的概念,本质上是一种类JSON的BSON格式的数据。 BSON是一种类JSON的二进制格式数据,它可以理解为在JSON基础上添加了 一些新的数据类型,包括日期、int32, int64等。 BSON是由一组组键值对组成,它具有轻量性、可遍 历性和高效性三个特征。可遍历性是MongoDB将BSON 作为数据存储的主要原因。 使用MongoDB文档时需要注意以下问题:
- MongoDB中写操作的原子性限制在文档级别,对文档的保存、修改、删除 等都是原子操作
- 单个文档占用的存储空间不能超过16MB
- MongoDB会尽量保持文档被插入时键值对的顺序
- 文档中的键/值对是有序的
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。 关于文档键的命名需要注意以下几点:
- _id是系统保留的关键字,它是默认的主键,该值在集合中必须唯一,且不 可更改
- 键不能包含\0或空字符,这个字符用于表示键的结尾
- 不能以$开头
- 不能包含.(点号)
- 键是区分大小写的且不能重复例如:{foo:l,Foo:1}
把一组相关的文档放到一起组成了集合,如果将MongoDB的一个文档比喻 为关系型数据库中的一行,那么一个集合就相当于一张表。 MongoDB的集合是模式自由的,一个集合里面的文档可以是各式各样。 例如 下面的两个文档可以出现了同一个集合中。
{
"site"
:
"www.baidu.com"
}
{
"site"
:
"www.google.com"
,
"name"
:
"Google"
}
{
"site"
:
"www.mongodb.org"
,
"name"
:
"Mongodb"
,
"num"
:
5
}
MongoDB提供了一些特殊功能的集合,例如 capped collection、 system.indexes、system.namespaces等。 关于集合的命名需要注意以下几点:
- 集合名不能是空字符串("")
- 集合名不能含有\0字符(空字符),该字符表示集合名的结尾
- 集合名不能以”syste m .'’开头,此前缀是系统本身保留的
- 集合名中不能包含$字符(注:可包含.)
数据库的信息是存储在集合中。它们使用了系统的命名空间: dbname.system.* 在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection),如下:
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 列出所有名字空间 |
dbname.system.indexes | 列出所有索引 |
dbname.system.profile | 包含数据库概要(profile)信息 |
dbname.system.users | 列出所有可访问数据库的用户 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态 |
对于修改系统集合中的对象有如下限制:
在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。 {{system.users}}是可修改的。 {{system.profile}}是可删除的。
多个文档组成集合,而多个集合组成了数据库。一个MongoDB实例可以 承载多个数据库,每个数据库都有独立的权限,在磁盘上,不同的数据库也 可放置在不同的文件夹中(启动时加directoryperdb选项)。 为了更好的组织数据,一般情况下,会把属于同一个应用程序(或同一种 业务类型)的所有数据放到一个数据库中。 关于数据库的命名需要注意以下几点:
- 不能是空字符串("")
- 不能以$开头
- 不能包含.(点号)和空字符串
- 数据库名字区分大小写(建议数据库名全部使用小写)
- 数据库名长度最多为64个字节
- 不要与系统保留的数据库名字相同,这些数据库包括:admin, local, config等