database:数据库
collection:数据集合,相当于sql表(table)
document:数据文档,相当于sql行(row)
field:数据域,相当于sql字段(column)
index:索引
primary key:主键,自动设置_id为主键
MongoDB不支持表连接(table joins),但可以嵌入文档
数据库
一个mongodb中可以建立多个数据库
MongoDB默认数据库为db,该数据库存储在data目录中
MongoDB单个实例可以容纳多个独立的数据库,每个数据库有自己的集合与权限,不同的数据库放置在不同的文件中
show dbs命令可以显示所有数据的列表
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
db命令可以显示当前数据库对象或集合
> db
test
use命令可以连接指定数据库
> use local
switched to db local
> db
local
数据库通过名字标识,数据库名可以是满足以下条件的任意UTF-8字符:不能是空字符串("");不得含有空格、.、$、/、\或空字符;应全部小写;最多64字节。
有一些数据库名是保留的,可直接访问这些有特殊作用的数据库。
admin,从权限的角度来看,这是root数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,例如列出所有的数据库或者关闭服务器。
local,这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
config,当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
文档
文档是一组键值(key-value)对(BSON)
MongoDB文档不需要设置相同字段,且相同字段不需要相同数据类型
文档中的键/值对有序
MongoDB区分类型,且区分大小写
文档不能有重复的键
文档的键是字符串,可以是满足以下条件的任意UTF-8字符:键不能含有空字符,空字符用于表示键的结尾;.与$有特殊意义,只有在特定环境下可以使用;一般以下划线(_)开头的键是保留的。
集合
即MongoDB文档组,存在于数据库中,无固定结构,对集合可以插入不同格式与类型的数据,但通常插入集合的数据有一定关联性
集合名不能是空字符串;不能含有空字符,空字符表示集合名的结尾;不能以system.开头,这是为系统集合保留的前缀;用户创建的集合名不能含有保留字符,部分驱动程序支持是因为部分系统生成的集合中包含该字符,除非要访问系统创建的集合,否则不要使用$。
Capped collections
即固定大小的collection,具有队列过期的特性,以高性能自动维护对象的插入顺序,适用于记录日志一类的功能。与标准collection不同,必须显式创建并指定大小(单位:字节),指定的存储大小包含数据库的头信息。
Capped collections按照文档插入顺序保存,且文档在磁盘上存放位置按照插入顺序保存。当更新Capped collections中文档时,更新后文档不可以超过之前文档大小,以确保所有文档在磁盘上的位置不变。
MongoDB操作日志文件oplog.rs即利用Capped Collection实现。
db.createCollection("集合名", {capped:true, size:集合大小})
Capped collection中可以添加新对象或进行更新,但不会增加存储空间。若存储空间增加,则更新失败。
Capped Collection无法删除文档,可以使用drop()方法删除所有行。删除后,必须显式重建collection。
元数据
数据库的信息存储在集合中,使用系统的命名空间:dbname.system.*
在MongoDB数据库中命名空间是包含多种系统信息的特殊集合(Collection)
dbname.system.namespaces,列出所有名字空间
dbname.system.indexes,列出所有索引
dbname.system.profile,包含数据库概要(profile)信息
dbname.system.users,列出所有可访问数据库的用户
dbname.local.sources,包含复制对端(slave)的服务器信息与状态
修改系统集合中的对象有限制:dbname.system.indexes插入数据可以创建索引,但此外该表信息不可变(drop index命令自动更新相关信息),dbname.system.users可修改,dbname.system.profile可删除。
MongoDB数据类型
String,字符串,要求以UTF-8编码。
Integer,整型数值。
Boolean,布尔值。
Double,双精度浮点值。
Min/Max keys,将一个值与BSON元素的最低值和最高值相对比。
Array,将数组或列表或多个值存储为一个键。
Timestamp,时间戳,记录文档修改或添加的具体时间。
Object,用于内嵌文档。
Null,用于创建空值。
Symbol,符号,等同于字符串类型,但一般用于采用特殊符号类型的语言。
Date,日期时间,以UNIX时间格式存储当前日期或时间,可自定义。
Object ID,对象 ID,用于创建文档的ID。
Binary Data,二进制数据。
Code,代码类型,用于在文档中存储JavaScript代码。
Regular expression,正则表达式类型。
ObjectId
类似唯一主键,可以快速生成与排序,包含12 bytes:
(1) 第1-4个字节表示创建unix时间戳
(2) 第5-7个字节是机器标识码
(3) 第8-9个字节由进程id组成PID
(4) 第10-12个字节是随机数
MongoDB中存储文档必须有_id键,该键可以是任何类型,默认是ObjectId对象
由于ObjectId中已保存创建的时间戳,因此无需为文档保存时间戳字段,可通过getTimestamp()函数获取。
> var obj = ObjectId()
> obj
ObjectId("5f19742b8b39bd18b774e5ff")
> obj.getTimestamp()
ISODate("2020-07-23T11:27:39Z")
> obj.str
5f19742b8b39bd18b774e5ff
时间戳
时间戳值是一个64位的值,前32位是一个time_t值(与Unix新纪元相差的秒数),后32位是在该秒中操作的一个递增的序数。
在单个mongod实例中,时间戳值通常唯一。
在复制集中,oplog有一个ts字段,使用BSON时间戳表示操作时间。
BSON时间戳类型主要由MongoDB内部使用,在大多数应用开发中,可以使用BSON日期类型。
日期
表示当前距离Unix新纪元(1970年1月1日)毫秒数,有符号,负数表示1970年之前的日期。
> var obj = Date()
> obj
Thu Jul 23 2020 19:29:41 GMT+0800 (CST)
> typeof obj
string
> obj.toString()
Thu Jul 23 2020 19:29:41 GMT+0800 (CST)