2 MongoDB术语

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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343