第一部分:mongodb服务启动与链接
下载二进制文件放置在linux目录下
解压二进制文件,将文件夹重命名下,如,mongodb3.0.2,进入目录进入bin下,我们可以看到如下程序,说几个重点的:
返回上层目录,创建一个咱们自己的mongodb的文件夹,目录如下:
4个文件夹分别代表了:
Bin 命令文件夹 data 数据库相关文件夹
Conf 配置文件夹 log 日志文件夹
将mongo3.0.2中的bin目录下的mongod服务cp到maizuo-mongo的bin目录下待启动,此时我们进入conf文件夹下,vi mongod.conf文件,写入以下内容:
Port 服务启动端口 dbpath数据库所在文件夹 logpath 日志存放位置 fork只在linux下有用 意味后台进城启动
配置完成后,进入maizuo-mongo目录,使用命令./bin/mongod -f conf/mongod.conf 启动mongodb服务,输入如下内容表明服务启动成功。
下面,我们需要将源文件下的mongo命令cp到我们的maizuo-mongo的bin目录下,然后使用客户端连接mongodb服务,在这之前我们可以通过./bin/mongo --help命令看一下连接的命令:
由于我们当前未配置用户名和密码 所以暂时不用关心[options]里的内容,使用命令
./bin/mongo 127.0.0.1:12345连接mongodb
我们发现它默认让我们连接的是test数据库 显示如上内容并出现>箭头,表示成功。
可以使用db.shutdownServer()关闭mongodb服务。
第二部分:数据库和表相关操作
1、数据库相关
Db 显示当前数据库
Show dbs 显示所有数据库
Use maizuo 切换到maizuo数据库 maizuo不存在 会在合适的时机自动创建
Show collections 显示所有表名(在mongo里称之为集合)
2、插入
Db.maizuo_users.insert({name:’lvpeng’}) 只能插入一条
For(int i=1;i<6;i++) Db.maizuo_users.insert({name:i}) 插入多条
3、查询
db.maizuo_users.count() 查询表中有多少条数据
Db.maizuo_users.find() 查询全部数据
Db.maizuo_users.find({name:’lvpeng’}) 根据条件查询数据 支持中文
查询出来的数据 自带了_id属性 不过我们可以覆盖这个属性
Db.maizuo_users.find().skip(2).limit(2).sort({name:1}) 查询数据 过滤前2条 只返回两条 并且按照name属性正向排序
4、更新
1、将姓名为lvpeng 的用户更新为xiaoxiong
Db.maizuo_users.update({name:’lvpeng’},{name:’xiaoxiong’})
2、更新姓名为xiaoxiong 的用户设置它的年龄为23岁 使用$set 关键词
3、更新不存在的数据时,默认是不会执行成功的,但如果我们有类似的需求:在更新一条不存在的数据时,如果不存在,则insert进去,首先我们删掉name为xiaoxiong 的记录,然后执行更新,设置update方法的第三个参数为true 表明如果不存在则插入
4、默认只更新第一条数据,如果我们想所有符合条件的数据,需要设置update第4个参数:
5、删除
删除操作必须传递参数。与更新不同的是,默认删除所有复合条件的数据,例如:
删除表可以使用db.maizuo_users.drop();
索引介绍
数据库大的时候 使用索引可以加快速度,通过getIndexes方法可以查询索引
使用ensureIndex方法 创建索引,其中1代表方向,需要注意的是集合里的沪深据过多时,创建索引会比较慢,原因你应该懂的。创建完成后,再次使用age作为条件查询,速度会加快。
第三部分:简单索引使用
1、id索引
_id默认的唯一索引
2、单键索引
最普通的索引,和id索引的区别是不会自动创建。
3、多键索引
单键索引的值为一个单一的值,多键索引具有多个值
4、复合索引
5、过期索引
(1)在一段时间后会过期的索引
(2)在索引过期后,对应的数据会被删除
(3)适合存储用户的登录数据或日志
(4)过期单位为秒,但有一定的误差。
需要注意的是:存储在过期索引字段的值必须是指定的时间类型ISODate或ISODate数组 否则不能被自动删除;如果为ISODate数组 则按照最小的时间删除,另外过期索引不能为复合索引。删除时间不精确,有一定误差,1分钟的定时任务进程。
第四部分:全文索引
创建方法:
db.maizuo_users.ensureIndex({key:’text’}) text为固定的写法 意思为key字段上为全文索引
db.maizuo_users.ensureIndex({key1:’text’,key2:’text’}) 多字段的全文索引
db.maizuo_users.ensureIndex({‘$**’:’text’}) 所有字段的全文索引
1、全文索引创建
2、全文索引查询
首先插入两条测试数据
3、近似度查询
初始化数据
按之前的查询
加行score评分条件返回
按照score排序
4、全文索引的问题
每次查询只能指定一个$text查询
$text不能排除某些查询条件
不支持中文 模糊也好像不支持
第五部分 地理位置索引
将一些点的位置存储在mongodb中, 创建索引后,可以按照位置来查询其他点。
1、分类
2d索引 用于存储和查找平面上的点
2dsphere索引 用于存储和查找球面上的点
区别是计算方式的不同
2、查找方式
查询距离某个点一定距离内的点
查找包含在某个区域内的点
3、2d索引
Db.maizuo_seats_ensureIndex({w:’2d’});创建索引
位置表示方式:经纬度
取值范围:[-180,180] [-90,90]
4、$near 查询附近的点
$maxDistance最大距离
5、$geoWithin查询 查询某个形状内的点
(1)$box:矩形
{$box:[[x1,y1],[x2,y2]]}
(2)$center:圆形
{$center:[[x1,y1],r]}
(3)$polygon:多边形
{$polygon[[x1,y1],[x2,y2],[x3,y3]]}
6、$geoNear查询
$near的升级版
Db.runCommand(
{geoNear:seats,
Near:[2,2],
minDistance:
maxDistance:
}
)
第六部分 性能评估和监控
1、mongostat工具
用于查询mongodb运行状态的程序
Mongostat -h 127.0.0.1:12345
2、Profile集合
修改level为2 profile会记录所有mongodb的操作
3、日志介绍
在mongod.conf配置文件里可以设置日志文件的详细级别
从1个v到5个v 日志在log目录下
4、Explain分析
针对一个查询的分析
第七部分 Mongodb安全
1、安全级别
(1)物理隔离
(2)网络隔离
(3)防火墙
(4)用户名密码
2、权限开启
Auth true 和keyfile开启
3、创建用户
CreateUser({
User:’’,
Pwd:’’
customData:’’,
Roles:[{role:’roletype’,db:’’}]
})
roleType: read readWrite dbAdmin dbOwner userAdmin