一, MongoDB 概念解析
不管学习什么数据库都应该学习其中的基础概念, 在 MongoDB 中基本的概念是文档, 集合, 数据库
SQL 术语 / 概念 | MongoDB 术语 / 概念 | 解释 / 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表 / 集合 |
row | document | 数据记录行 / 文档 |
column | field | 数据字段 / 域 |
index | index | 索引 |
table joins | 表连接,MongoDB 不支持 | |
primary key | primary key | 主键,MongoDB 自动将_id 字段设置为主键 |
二, MongoDB 数据库
一个 MongoDB 中可以建立多个数据库.
MongoDB 的默认数据库为 "db", 该数据库存储在 data 目录中.
MongoDB 的单个实例可以容纳多个独立的数据库, 每一个都有自己的集合和权限, 不同的数据库也放置在不同的文件中.
1, 显示所有数据的列表.
"show dbs"
?
2, 显示当前数据库对象或集合.
"db"
?
3, 连接到一个指定的数据库.
"use 数据库名称"
注: 如果指定数据库不存在, 则会自动创建.
数据库也通过名字来标识. 数据库名可以是满足以下条件的任意 UTF-8 字符串.
1. 不能是空字符串("").
2. 不得含有' '(空格),.,$,/,\ 和 \ 0 (空字符).
3. 应全部小写.
4. 最多 64 字节.
有一些数据库名是保留的, 可以直接访问这些有特殊作用的数据库.
1. admin: 从权限的角度来看, 这是 "root" 数据库. 要是将一个用户添加到这个数据库, 这个用户自动继承所有数据库的权限. 一些特定的服务器端命令也只能从这个数据库运行, 比如列出所有的数据库或者关闭服务器.
2. local: 这个数据永远不会被复制, 可以用来存储限于本地单台服务器的任意集合.
3. config: 当 Mongo 用于分片设置时, config 数据库在内部使用, 用于保存分片的相关信息.
三, MongoDB 文档
文档是一组键值 (key-value) 对(即 BSON).MongoDB 的文档不需要设置相同的字段, 并且相同的字段不需要相同的数据类型, 这与关系型数据库有很大的区别, 也是 MongoDB 非常突出的特点.
?
简单文档例子:
{ "c02":"yunjisuan", "name":"云计算"}
需要注意的是:
1. 文档中的键 / 值对是有序的.
2. 文档中的值不仅可以是在双引号里面的字符串, 还可以是其他几种数据类型(甚至可以是整个嵌入的文档).
3. MongoDB 区分类型和大小写.
4. MongoDB 的文档不能有重复的键.
5. 文档的键是字符串. 除了少数例外情况, 键可以使用任意 UTF-8 字符.
文档键命名规范:
键不能含有 \ 0 (空字符). 这个字符用来表示键的结尾.
. 和 $ 有特别的意义, 只有在特定环境下才能使用.
以下划线 "_" 开头的键是保留的(不是严格要求的).
四, 集合
集合就是 MongoDB 文档组, 类似于 RDBMS (关系数据库管理系统: Relational Database Management System)中的表格.
集合存在于数据库中, 集合没有固定的结构, 这意味着你在对集合可以插入不同格式和类型的数据, 但通常情况下我们插入集合的数据都会有一定的关联性.
?
可以将以下不同数据结构的文档插入到集合中:
- {
- "site":"www.baidu.com"
- }
- {
- "site":"www.google.com","name":"Google"
- }
当第一个文档插入时, 集合就会被创建.
法的集合名:
集合名不能是空字符串 "".
集合名不能含有 \ 0 字符(空字符), 这个字符表示集合名的结尾.
集合名不能以 "system." 开头, 这是为系统集合保留的前缀.
用户创建的集合名字不能含有保留字符. 有些驱动程序的确支持在集合名里面包含, 这是因为某些系统生成的集合中包含该字符. 除非你要访问这种系统创建的集合, 否则千万不要在名字里出现 $.
五, 元数据
数据库的信息是存储在集合中. 它们使用了系统的命名空间:
dbname.system.*
在 MongoDB 数据库中名字空间 <dbname>.system.* 是包含多种系统信息的特殊集合(Collection), 如下:
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 列出所有名字空间。 |
dbname.system.indexes | 列出所有索引。 |
dbname.system.profile | 包含数据库概要 (profile) 信息。 |
dbname.system.users | 列出所有可访问数据库的用户。 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态。 |
六, MongoDB 数据类型
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真 / 假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Array | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
七, MongoDB 连接
标准 URI 连接语法:
MongoDB://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
说明:
MongoDB:// 这是固定的格式, 必须要指定.
username:password@ 可选项, 如果设置, 在连接数据库服务器之后, 驱动都会尝试登陆这个数据库.
host1 必须的指定至少一个 host, host1 是这个 URI 唯一要填写的. 它指定了要连接服务器的地址. 如果要连接复制集, 请指定多个主机地址.
portX 可选的指定端口, 如果不填, 默认为 27017
/database 如果指定 username:password@, 连接并验证登陆指定数据库. 若不指定, 默认打开 test 数据库.
?options 是连接选项. 如果不使用 / database, 则前面需要加上 /. 所有连接选项都是键值对 name=value, 键值对之间通过 & 或;(分号)隔开
标准的连接格式包含了多个选项(options), 如下所示:
选项 | 描述 |
---|---|
replicaSet=name | 验证 replica set 的名称。 Impliesconnect=replicaSet. |
slaveOk=true false | 1. true: 在 connect=direct 模式下,驱动会连接第一台机器,即使这台服务器不是主。在 connect=replicaSet 模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。 2.false: 在 connect=direct 模式下,驱动会自动找寻主服务器. 在 connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。 |
w=n | 驱动添加 { w : n } 到 getLastError 命令. 应用于 safe=true。 |
wtimeoutMS=ms | 写入超时时间,驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true. |
fsync=true false | 1. true: 驱动添加 { fsync : true } 到 getlasterror 命令. 应用于 safe=true. 2. false: 驱动不会添加到 getLastError 命令中。 |
journal=true false | 如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true |
connectTimeoutMS=ms | 可以打开连接的时间。连接超时时间 |
socketTimeoutMS=ms | 发送和接受 sockets 的时间。 |
MongoDB 连接命令格式:
使用用户名和密码连接到 MongoDB 服务器, 你必须使用'username:password@hostname/dbname' 格式,'username'为用户名,'password' 为密码.
?
使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上:
MongoDB://admin:123456@localhost/
使用用户名和密码连接登陆到指定数据库:
MongoDB://admin:123456@localhost/test
连接 replica set 三台服务器 (端口 27017, 27018, 和 27019):
MongoDB://localhost,localhost:27018,localhost:27019
连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器.
- MongoDB://host1,host2,host3/?slaveOk=true
- ?
直接连接第一个服务器, 无论是 replica set 一部分或者主服务器或者从服务器.
- MongoDB://host1,host2,host3/?connect=direct;slaveOk=true
- ?
安全模式连接到 localhost:
MongoDB://localhost/?safe=true
以安全模式连接到 replica set, 并且等待至少两个复制服务器成功写入, 超时时间设置为 2 秒.
MongoDB://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
来源: http://www.bubuko.com/infodetail-2950213.html