1. 优点
基于分布式文件存储的数据库。能为WEB应用提供可扩展的高性能数据存储解决方案。
2. 将数据存储为一个文档,数据结构由键值对组成。文档类似于JSON对象。字段值可以包含其他文档,数组以及文档数组。
1. 可执行文件位于bin目录下 数据存储在data目录的db目录下【需手动创建】
2. /data/db 是默认启动的数据库路径( --dbpath )
3. 运行服务:执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
若数据库目录非/data/db 可通过 --dbpath指定、
4. 进入后台: bin目录,然后执行mongo命令文件。默认连接到test文档(数据库)
cd /home/app/mongodb/bin/mongo
5. 启动HTTP用户界面,需指定参数--rest $ ./mongod --dbpath=/data/db --rest
Web界面访问端口比服务端口多1000
6. 基本概念:文档,集合,数据库
数据库:database 数据表/集合:collection 数据记录行/文档:document
数据字段/域:field 索引:index 主键:primary key 自动将_id字段设为主键
不支持表链接
7. 一个mongodb可建立多个数据库。默认数据库为db(存储在data目录中),
???MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
1. 命令【转8】
显示所有数据库列表:show dbs
显示当前数据库集合或对象:db
连接到指定数据库:use 数据库名
数据库可通过名字标识。数据库名可以是满足以下条件的任意UTF-8字符串。
(1)不能是空字符串( " " )
(2)不能含有空格,点(.),$,/,\和\0 (空字符)
(3)全部为小写
(4)最多为64字节
特殊数据库:
(1)admin
权限上这是root数据库。若添加一个用户则此用户自动继承所有数据库的权限
(2)local
永远不会被复制的数据库。可以用来存储限于本地单台服务器的任意集合
(3)config
当Mongo用于分片设置时,在内部使用,用于保存分片的相关信息。
2. 文档
一组键值对(即BSON)。
???不需要设置相同的字段,且相同的字段不需要相同的数据类型。
注意:
(1)键值对是有序的
(2)值不仅可以是字符串,还可以是其他几种数据类型
(3)区分类型和大小写
(4)不能有重复的键
(5)键一般为任意UTF-8字符串
键命名规范:
(1)不能含有空字符\0,???这个字符用来表示键的结尾。
(2).和$有特殊意义,只能在特定环境下使用
(3)???以下划线 "_" 开头的键是保留的
3. 集合
文档组,类似于表格。
存储在数据库中,没有固定的结构。可插入不同格式和类型的数据,但通常插入集合的数据会有一定的关联性
插入第一个文档时,集合就会被创建
集合命名规范:
(1)不能是空字符串
(2)不能含有空字符\0,???这个字符用来表示集合名的结尾。
(3)不能以 "system."开头,这是为系统保留的前缀
(4)不能含有保留字符。访问系统创建的集合需要在名字里出现 $
4. capped collections
有很高的性能以及队列过期的特性(过期按照插入的顺序)
是高性能自动的维护对象的插入顺序。适合类似记录日志功能
需显示创建并指定一个collection的大小(包含了数据的头信息),单位为字节。collection的数据存储空间值提前分配
注意:
可添加新的对象,但对象不会增加存储空间
可进行更新,如果新添的对象增加存储空间,更新失败
不允许进行删除。drop()删除collection所有的行【删除后须显示的重新创建这个collection】
在32bit机器中,最大存储为1e9( 1X109)个字节。
5. 元数据
数据库的信息是存储在集合中的。使用系统的命名空间:dbname.system.*
dbname.system.* 是包含多种系统信息的特殊集合。例: dbname.system.namespaces 列出所有名字的空间
dbname.system.indexes 列出所有索引
dbname.system.profile 包含数据库概要(profile)信息
dbname.system.uses 列出所有可访问数据库的用户
dbname.local.sources 包含复制对端(slave)的服务器信息和状态
注意:修改系统集合的对象限制
在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
{{system.users}}是可修改的。 {{system.profile}}是可删除的。
6.常用数据类型
String:UTF-8 编码的字符串,存储数据常用的数据类型
Integer:存储数值
Boolean:存储布尔值
Double:存储(双精度)浮点值
Min/Max keys:将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays:将数组或列表或多个值存储为一个键
Timestamp:时间戳,记录文档修改或添加时间
Object:用于内嵌文档
Null:创建空值
Symbol:采用特殊符号类型
Date:使用UNIX时间格式存储当前日期或时间,可自己指定
Object ID:创建文档的ID
Binary Data:存储二进制数据
Code:用于在文档中存储JavaScript代码
Regular expression:存储正则表达式
7. 连接[Mongodb Shell 连接]
连接语法:
mongodb://[username:[email protected]] host1 [:port1] [, host2 [:port2]] [/[database] [?options] ]
PS:
mongodb:// 固定格式,必须指定
[username:[email protected]] 如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host1 至少指定一个host[要连接的服务器的地址],如果连接复制集,请指定多个主机地址
portX 可选的指定端口,默认为27017
/database 如果指定username:[email protected],连接并验证登陆指定数据库。若不指定,默认打开admin数据库。
?options 如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
例:
replicaSet = name
slaveOk = true | false
safe = true | false
w = n
wtimeoutMS = ms
fsync = true | false
journal = true | false
connectTimeoutMS = ms
socketTimeoutMS = ms
8. 操作
创建数据库语法格式:
use 数据库名 如果不存在则创建数据库,否则切换到指定数据库
删除数据库语法格式:
db.dropDatabase() 删除当前数据库,默认为test 可使用 db 命令查看当前数据库名
插入文档语法格式:[ 使用 insert() 或 save() 方法向集合中插入文档]
db.COLLECTION_NAME.insert(document)
db.col.save(document) 不指定_id字段,save() 类似于insert() 指定则会更新该_id的数据
更新文档语法格式:[使用 update() 和 save() 方法来更新集合中的文档。update() 用于更新已存在的文档,save() 通过传入的文档来替换已有的文档]
db.collection.update{
<query>,
<update>,
{
update:<boolean>
multi:<boolean>
writeConcern:<document>
}
}
参数说明:
query:update的查询条件,类似sql update查询内where后面的。
update:update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert:如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi:mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern:抛出异常的级别。
db.collection.save{
<document>,
{
writeConcern:<document>
}
}
参数说明:
document:文档数据
writeConcern:抛出异常的级别
删除文档语法格式:【在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。】
db.collection.remove{
<query>,
<justOne>
}
2.6版本之后:
db.collection.remove{
<query>,
{
justOne:<boolean>,
writeConcern:<document>
}
}
参数说明:
query:删除的文档的条件。
justOne:如果设为 true 或 1,则只删除一个文档。
writeConcern:抛出异常的级别。
删除全部:
db.col.remove( { } )
db.col.find( )
查询文档语法格式:
db.collection.find(query,projection)
参数说明:
query:使用查询操作符指定查询条件
projection:使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
易读方式读取数据:db.col.find().pretty()
pretty():以格式化的方式显示所有文档