1)mongodb默认插入的时候会给值设置一个id,也可以自己插入的时候把id设置死来。
1、查看数据库
show dbs
2、切换数据库
use xxx
3、删除数据库
进入数据库
db.dropDatabase()
4、插入数据
默认插入的时候如果没有此表默认或自动创建,insert是可以插入数组的
db.表名.insert({x:1})
5、使用find查询不带参数默认返回所有查询到的数据
db.表名.find()
6、使用find查询带参数默认返回所有查询到对应条件的数据、
db.表名.find({x:1})
7、统计返回的数据个数
db.表名.find().count()
8、使用跳过3条数据,并且限制两条返回数据,使用x:1排序
db.表名.find().skip().limit(2).sort({x:1})
9、使用update更新数据,指定条件x:1,更新为x:999
db.表名.update({x:1},{x:999})
10、使用修改数据的时候不适用$set标签限定就会更新整条数据并覆盖
db.表名.update({x:100},{y:100}) 结果只有y:100
11、使用$set操作符限定,直更新指定的数据
db.表名.update({x:100},{$set:{y:100}}) 结果x:100,y:100
12、在更新一条不存在的数据的时候默认是不会自动创建的
在更行的结果后面加上true默认更新不存在的数据的时候会自动insert一条语句进去
db.表名.update({y:10},{y:20},true)
13、当有三条数据都满足条件的时候使用update更新数据的时候默认只能随机更新一条数据
14、使用update进行全文跟新的时候,设置affect条件false关闭限制
db.表名.update({x:1},{$set:{x:2}},false,true)
15、使用删除语句防止误操作必须使用条件,不适用条件报错,默认是删除所有符合条件的数据
db.表名.remove({x:1})
16、使用drop删除表
db.表名.drop()
17、展示数据库下面各表的名称
show tables
18、不使用索引条件来查询数据,在数据量大的时候默认不返回结果
19、查看表的索引状态
20、使用ensureIndex({x:1})创建索引跟insert相类似,系统负载较重的时候或者里面存在数据的时候默认不能使用这个命令,必须在创建表的时候就创建好索引,可以提高数据库的性能,创建索引后写入时间会被影响,但是可以大幅度提高查询的效率
db.表名.ensureIndex({x:1}) ----- x为+1为正向排序,x为-1表示逆向排序
21、返回查询出来的第一条数据,默认只能用One
db.表名.findOne() --加条件不加条件都可以
22、获得当前的时间
new Date()
23、强制使用缩影,默认在稀疏索引上不能查找未指定的索引
db.表名.find({m:$exists:false}}).hint("m_1")
索引类型
1、_id索引
_id索引是绝大多数集合默认建立的索引
对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段
2、单键索引
单键索引是最普通的索引,它不会自动创建
单键索引默认是可以重复创建的
3、多建索引
多键索引与单键索引创建形式相同,区别在于字段的值
单键索引:值为一个单一的值,例如字符串、数字或者日期
多键索引:值具有多个记录,例如数组
4、复合索引
当我们的查询条件不只有一个时,就需要建立复合索引
通过ensureIndex({x:1,y:1})创建复合索引,x和y都变成了索引
5、过期索引
1、过期索引:是在一段时间后会过期的索引
2、在索引过期后,相应的数据会被删除
3、这适合存储一些在一段时间后失效的数据例如用户的登入信息、存储日志
4、建立方法:expireAfterSeconds默认失效的秒数,time:1是默认的格式
db.表名.ensureIndex({time:1},{expireAfterSeconds:10})
插入完成失效时间之后再往里面insert值
1、存储在过期索引字段的值必须是制定的时间类型
说明:必须是ISODate或者ISODate数组,不能使用时间戳(默认没有expireAfterSecond和参数),否则不能自动删除
2、如果指定了ISODate数组,则按照最小的时间进行删除(只要其中有一个过期时间到了,就会直接被删除)
3、过期索引不能是复合索引
4、删除时间不是精确。
说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,存在误差
6、全文索引
对字符串与字符串数组创建爱你全文可收索的索引
适用情况:
{author:"",titile:"",article:""}
建立方法:
db.表名.ensureIndex({key:"text"})
db.表名.ensureIndex({key_1:"text",key_2:"text"})
db.表名.ensureIndex({"$**","text"})
db.表名.ensureIndex({article:"text"})
这里的$text是搜索文档内容符合的信息
查询索引db.表名.find({$text:{$search:"text"}})
1、在查找字符串中如果不加上-(负号)就默认不查找这个字符串
2、如果要使用与的方式查询数据就需要使用""包裹数据并进行查询,并且在""前面必须使用\转意这个引号
通过scort字符可以实现返回相似度,{score:{$meta:"textScore"}}默认格式,通过.score({score:{$meta:"textScore"}})排序从大到小
db.表名.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})
db.表名.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).score({score:{$meta:"textScore"}})
全文索引相似度:
$meta操作符:{score:{$meta:"textScore"}}写在查询条件后面的可以返回结果的相似度与sort一起使用,可以达到很好的使用效果
全文索引非常强大,但是同样存在限制
每次查询,只能制定一个$text查询
$text查询不能出现在$nor查询中
查询中如果不包含$text,hint 不能起作用
MongoDB全文索引还不支持中文
7、地理位置索引
索引属性
1、创建索引时的格式:db.表名.ensureIndex({param},{param})其中第二个参数便是索引的属性
比较重要的属性有;
名字
名字,name指定:db.表名.ensureIndex({},{name:""})
唯一性
唯一性,unique制定:db.表名.ensureIndex({},{unique:true/false})
db.表名.ensureIndex({m:1,n:1},{unique:true})
设置唯一之后默认只能插入一条m:1,n:1,如果插入第二条m:1,n:1的数据的时候就会报key冲突错误
稀疏性
sparse指定:
db.collection.ensureIndex({},{sparse:true/false})
是否定时删除,exporeAfterSeconds指定:
TTL,过期索引
地理位置索引
概念:将一些点的位置存储在MongDB中,创建索引后可以按照位置来查找其他点
子分类:2d索引,用于存储和查找平面的点。
2dsphere索引,用于存储和查找球面上的点。
查找方式:
1、查找距离某个点一定距离内的店。
2、查找包含在某区域内的点。
2D索引:平面地理位置索引
创建方式:db.表名.ensureIndex({w:"2b"})
2Dsphere索引:球面地理位置索引
创建方式:db.表名.ensureIndex({w:"2d"})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-180,180] 纬度[-90,90] 超过范围会出现不可预期的错误
查询方式:
1、$near查询:查询距离某个点最近的点
2、$geoWithin查询:查询某个形状内的点
db.表名.find({w:{$near:[1,1]}}) near会返回一百个距离最近的点坐标
db.表名.find({w:{$near:[1,1],$maxDistance:10}}) $maxDistance限制返回距离,在2D索引查找的时候不支持minDistance限制方法
3、查询方式:
1)$near查询:查询距离某个点最近的点
2)$geoWithin查询:查询某个形状内的点
形状的表示
1、$box:矩形,使用
{$box:[[<x1>,[y1],[<x2>,<y2>]]}表示
查询db.kai.find({w:{$geowithin:{$box:[[0.0],[3,3]]}}})
2、$center:圆形,使用
{$center:[[<x1>,<y1>],r]}表示
3、$polygon:多边形,使用
{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示
索引构建情况分析
1、索引好处:加快缩影相关的查询
2、索引不好处:增加磁盘空间消耗,降低写入性能
如何评判当前索引构建情况:
1、mongostat工具介绍 默认在server服务文件中存在,可以开启事实检测状态mongostat.exe -h 127.0.1.1:27017 idx miss %增高会导致qr性能一下增高,降低效率,需要做规避
2、profile集合介绍
3、日志介绍
4、explain打印详细日志 db.kai.find({x:1}).explain()
MongoDB安全概览
1、最安全的物理隔离: 不现实
2、网络隔离其次: 内部网,局域网
3、防火墙隔离: 通过配置mongodb的访问连接ip,只准许某些ip访问
4、用户名密码在最后:
MongoDB安全,默认MongoDB是不开启服务的,在mongod.cof中配置
1、auth开启 true
2、keyfile开启 true
MongoDB创建用户
1、创建语法:createUser(2.6之前为addUser)
2、{user:"<name>",
pwd:"<cleartext password>",
customData:{<any information>}, --对用户密码的一些说明,任意数据
roles:[{role:"<role>",db:"<database>"}] --创建的角色类型,db创建在哪个角色上
}
3、角色类型:内建类型(read,readWrite,dbAdmin,dbOwner,userAdmin)
MongoDB用户角色详解
1、数据库角色(read,readWrite,DBAdmin,dbOwner,userAdmin)
2、集群角色(clusterAdmin,clusterManager....)
3、备份角色(backup,restore...)
4、其他特殊权限(DBAdminAnyDatabase....)
mongodb replica sets(复制集)提高数据冗余,增加高可用
1、查看数据库
show dbs
2、切换数据库
use xxx
3、删除数据库
进入数据库
db.dropDatabase()
4、插入数据
默认插入的时候如果没有此表默认或自动创建,insert是可以插入数组的
db.表名.insert({x:1})
5、使用find查询不带参数默认返回所有查询到的数据
db.表名.find()
6、使用find查询带参数默认返回所有查询到对应条件的数据、
db.表名.find({x:1})
7、统计返回的数据个数
db.表名.find().count()
8、使用跳过3条数据,并且限制两条返回数据,使用x:1排序
db.表名.find().skip().limit(2).sort({x:1})
9、使用update更新数据,指定条件x:1,更新为x:999
db.表名.update({x:1},{x:999})
10、使用修改数据的时候不适用$set标签限定就会更新整条数据并覆盖
db.表名.update({x:100},{y:100}) 结果只有y:100
11、使用$set操作符限定,直更新指定的数据
db.表名.update({x:100},{$set:{y:100}}) 结果x:100,y:100
12、在更新一条不存在的数据的时候默认是不会自动创建的
在更行的结果后面加上true默认更新不存在的数据的时候会自动insert一条语句进去
db.表名.update({y:10},{y:20},true)
13、当有三条数据都满足条件的时候使用update更新数据的时候默认只能随机更新一条数据
14、使用update进行全文跟新的时候,设置affect条件false关闭限制
db.表名.update({x:1},{$set:{x:2}},false,true)
15、使用删除语句防止误操作必须使用条件,不适用条件报错,默认是删除所有符合条件的数据
db.表名.remove({x:1})
16、使用drop删除表
db.表名.drop()
17、展示数据库下面各表的名称
show tables
18、不使用索引条件来查询数据,在数据量大的时候默认不返回结果
19、查看表的索引状态
20、使用ensureIndex({x:1})创建索引跟insert相类似,系统负载较重的时候或者里面存在数据的时候默认不能使用这个命令,必须在创建表的时候就创建好索引,可以提高数据库的性能,创建索引后写入时间会被影响,但是可以大幅度提高查询的效率
db.表名.ensureIndex({x:1}) ----- x为+1为正向排序,x为-1表示逆向排序
21、返回查询出来的第一条数据,默认只能用One
db.表名.findOne() --加条件不加条件都可以
22、获得当前的时间
new Date()
23、强制使用缩影,默认在稀疏索引上不能查找未指定的索引
db.表名.find({m:$exists:false}}).hint("m_1")
索引类型
1、_id索引
_id索引是绝大多数集合默认建立的索引
对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段
2、单键索引
单键索引是最普通的索引,它不会自动创建
单键索引默认是可以重复创建的
3、多建索引
多键索引与单键索引创建形式相同,区别在于字段的值
单键索引:值为一个单一的值,例如字符串、数字或者日期
多键索引:值具有多个记录,例如数组
4、复合索引
当我们的查询条件不只有一个时,就需要建立复合索引
通过ensureIndex({x:1,y:1})创建复合索引,x和y都变成了索引
5、过期索引
1、过期索引:是在一段时间后会过期的索引
2、在索引过期后,相应的数据会被删除
3、这适合存储一些在一段时间后失效的数据例如用户的登入信息、存储日志
4、建立方法:expireAfterSeconds默认失效的秒数,time:1是默认的格式
db.表名.ensureIndex({time:1},{expireAfterSeconds:10})
插入完成失效时间之后再往里面insert值
1、存储在过期索引字段的值必须是制定的时间类型
说明:必须是ISODate或者ISODate数组,不能使用时间戳(默认没有expireAfterSecond和参数),否则不能自动删除
2、如果指定了ISODate数组,则按照最小的时间进行删除(只要其中有一个过期时间到了,就会直接被删除)
3、过期索引不能是复合索引
4、删除时间不是精确。
说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,存在误差
6、全文索引
对字符串与字符串数组创建爱你全文可收索的索引
适用情况:
{author:"",titile:"",article:""}
建立方法:
db.表名.ensureIndex({key:"text"})
db.表名.ensureIndex({key_1:"text",key_2:"text"})
db.表名.ensureIndex({"$**","text"})
db.表名.ensureIndex({article:"text"})
这里的$text是搜索文档内容符合的信息
查询索引db.表名.find({$text:{$search:"text"}})
1、在查找字符串中如果不加上-(负号)就默认不查找这个字符串
2、如果要使用与的方式查询数据就需要使用""包裹数据并进行查询,并且在""前面必须使用\转意这个引号
通过scort字符可以实现返回相似度,{score:{$meta:"textScore"}}默认格式,通过.score({score:{$meta:"textScore"}})排序从大到小
db.表名.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})
db.表名.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).score({score:{$meta:"textScore"}})
全文索引相似度:
$meta操作符:{score:{$meta:"textScore"}}写在查询条件后面的可以返回结果的相似度与sort一起使用,可以达到很好的使用效果
全文索引非常强大,但是同样存在限制
每次查询,只能制定一个$text查询
$text查询不能出现在$nor查询中
查询中如果不包含$text,hint 不能起作用
MongoDB全文索引还不支持中文
7、地理位置索引
索引属性
1、创建索引时的格式:db.表名.ensureIndex({param},{param})其中第二个参数便是索引的属性
比较重要的属性有;
名字
名字,name指定:db.表名.ensureIndex({},{name:""})
唯一性
唯一性,unique制定:db.表名.ensureIndex({},{unique:true/false})
db.表名.ensureIndex({m:1,n:1},{unique:true})
设置唯一之后默认只能插入一条m:1,n:1,如果插入第二条m:1,n:1的数据的时候就会报key冲突错误
稀疏性
sparse指定:
db.collection.ensureIndex({},{sparse:true/false})
是否定时删除,exporeAfterSeconds指定:
TTL,过期索引
地理位置索引
概念:将一些点的位置存储在MongDB中,创建索引后可以按照位置来查找其他点
子分类:2d索引,用于存储和查找平面的点。
2dsphere索引,用于存储和查找球面上的点。
查找方式:
1、查找距离某个点一定距离内的店。
2、查找包含在某区域内的点。
2D索引:平面地理位置索引
创建方式:db.表名.ensureIndex({w:"2b"})
2Dsphere索引:球面地理位置索引
创建方式:db.表名.ensureIndex({w:"2d"})
位置表示方式:经纬度[经度,纬度]
取值范围:经度[-180,180] 纬度[-90,90] 超过范围会出现不可预期的错误
查询方式:
1、$near查询:查询距离某个点最近的点
2、$geoWithin查询:查询某个形状内的点
db.表名.find({w:{$near:[1,1]}}) near会返回一百个距离最近的点坐标
db.表名.find({w:{$near:[1,1],$maxDistance:10}}) $maxDistance限制返回距离,在2D索引查找的时候不支持minDistance限制方法
3、查询方式:
1)$near查询:查询距离某个点最近的点
2)$geoWithin查询:查询某个形状内的点
形状的表示
1、$box:矩形,使用
{$box:[[<x1>,[y1],[<x2>,<y2>]]}表示
查询db.kai.find({w:{$geowithin:{$box:[[0.0],[3,3]]}}})
2、$center:圆形,使用
{$center:[[<x1>,<y1>],r]}表示
3、$polygon:多边形,使用
{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示
索引构建情况分析
1、索引好处:加快缩影相关的查询
2、索引不好处:增加磁盘空间消耗,降低写入性能
如何评判当前索引构建情况:
1、mongostat工具介绍 默认在server服务文件中存在,可以开启事实检测状态mongostat.exe -h 127.0.1.1:27017 idx miss %增高会导致qr性能一下增高,降低效率,需要做规避
2、profile集合介绍
3、日志介绍
4、explain打印详细日志 db.kai.find({x:1}).explain()
MongoDB安全概览
1、最安全的物理隔离: 不现实
2、网络隔离其次: 内部网,局域网
3、防火墙隔离: 通过配置mongodb的访问连接ip,只准许某些ip访问
4、用户名密码在最后:
MongoDB安全,默认MongoDB是不开启服务的,在mongod.cof中配置
1、auth开启 true
2、keyfile开启 true
MongoDB创建用户
1、创建语法:createUser(2.6之前为addUser)
2、{user:"<name>",
pwd:"<cleartext password>",
customData:{<any information>}, --对用户密码的一些说明,任意数据
roles:[{role:"<role>",db:"<database>"}] --创建的角色类型,db创建在哪个角色上
}
3、角色类型:内建类型(read,readWrite,dbAdmin,dbOwner,userAdmin)
MongoDB用户角色详解
1、数据库角色(read,readWrite,DBAdmin,dbOwner,userAdmin)
2、集群角色(clusterAdmin,clusterManager....)
3、备份角色(backup,restore...)
4、其他特殊权限(DBAdminAnyDatabase....)
mongodb replica sets(复制集)提高数据冗余,增加高可用
540

被折叠的 条评论
为什么被折叠?



