您的位置:首页 > 数据库 > Mongodb

Mongodb学习笔记

2015-05-11 13:50 176 查看

第一部分: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: