目录
1. 基本概念
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
2. 数据库
2.1 查看数据库
语法:show databases / show dbs
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
2.2 选择数据库
语法:use 数据库名
> use admin
switched to db admin
>
> use testDB
switched to db testDB
>
"db" 命令可以显示当前数据库对象或集合。
> db
testDB
【注】MongoDB 选择不存在的数据库时不会报错,在后期插入数据时自动创建。即:隐式创建
2.3 删除数据库
1. 通过 use 选中数据库
2. 通过 db.dropDatabase() 删除数据库
> use testDB
switched to db testDB
>
> db.dropDatabase()
{ "dropped" : "testDB", "ok" : 1 }
>
3. 集合
集合就是 MongoDB 文档组,类似于 RDBMS 中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着可以插入不同格式和类型的数据。
3.1 查看集合
语法:show collections
3.2 创建集合
语法:db.createCollection('集合名')
> db.createCollection('user')
{ "ok" : 1 }
> show collections
user
3.3 删除集合
语法:db.集合名.drop()
> db.user.drop()
true
> show collections
>
3.4 capped collections
Capped collections 就是固定大小的 collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
Capped collections 是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能。和标准的 collection 不同,必须要显式的创建一个capped collection,指定一个 collection 的大小,单位是字节。collection 的数据存储空间值提前分配的。
Capped collections 可以按照文档的插入顺序保存到集合中,而且这些文档在磁盘上存放位置也是按照插入顺序来保存的,所以当我们更新Capped collections 中文档的时候,更新后的文档不可以超过之前文档的大小,这样话就可以确保所有文档在磁盘上的位置一直保持不变。
由于 Capped collection 是按照文档的插入顺序而不是使用索引确定插入位置,这样的话可以提高增添数据的效率。MongoDB 的操作日志文件 oplog.rs 就是利用 Capped Collection 来实现的。
要注意的是指定的存储大小包含了数据库的头信息。
> db.createCollection("myLog",{capped:true,size:10000})
{ "ok" : 1 }
- 在 capped collection 中,可以添加新的对象。
- 能进行更新,但对象不会增加存储空间。如果增加,更新就会失败 。
- 使用 Capped Collection 不能删除一个文档,可以使用 drop() 方法删除 collection 所有的行。
- 删除之后,你必须显式的重新创建这个 collection。
- 在32bit机器中,capped collection 最大存储为 1e9( 1X109)个字节。
4. 元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间:
dbname.system.*
在MongoDB数据库中名字空间 <dbname>.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}}是可删除的。
5. MongoDB 数据类型
下表为MongoDB中常用的几种数据类型。
数据类型 | 描述 | 举例 |
---|---|---|
null | 用于表示空值或不存在的字段 | {"name": null} |
布尔型 | 布尔值 true 或 false | {"x" : false} |
数值 | shell 默认使用 64 位浮点型数值 | {"x" : 3.14} 、{"x" : 3} |
字符串 | UTF-8 字符串 | {"name" : “zth”} |
日期 | 自新纪元以来经过的毫秒数,不存储时区 | {"x" : new Date()} |
正则表达式 | 查询时作为限定条件 | {"name" : /foo/i } |
数组 | 数据列表或数据集可以表示为数组,可包含不同类型 的元素。 | {"x" : ["a","b","c"] |
内嵌文档 | 文档可以嵌套其他文档,被嵌套的文档作为父文档的值 | {"x" : {"age":18}} |
对象id | 文档的唯一标识,一个 12 字节的ID | {"x" : ObjectId()} |
二进制数据 | 任意字节的字符串,保存非 UTF-8 字符的唯一方式 | |
代码 | 查询和文档中可以包含任意 js 代码 | {"x" : function() { /* …… */ } } |
对于整型值,可以使用 NumberInt 类(4字节带符号整数)或 NumberLong 类(8字节带符号整数)。例:{"x" : NumberInt(3)}
对于日期类型,在创建日期对象时,应使用 new Date(…),而非 Date(…)。如将构造函数作为函数进行调用(不带 new 的方式)返回的是日期的字符串表示而非日期对象。
ObjectId 占用12字节空间,是一个由24个十六进制数字组成的字符串。组成方式如下:
机器值:通常是机器主机名的散列值
PID:产生 ObjectId 进程的进程标识符
前 9 字节保证了同一秒钟不同机器不同进程产生的ObjectId是唯一的。最后3字节是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId也是不一样的。一秒钟最多允许每个进程拥有2563 (16 777216)个不同的ObjectId.