show dbs;
use imooc;
db.dropDatabase();
db.imooc_collection.insert({x:1})
show collections
db.imooc_collection.find()
db.imooc_collection.insert({x:3,_id:1}); --_id可以自动生成,手动插入时要求不能重复
db.imooc_collection.find({x:1})
for(i=3;i<100;i++)db.imooc_collection.insert({x:1}); --js语法来插入
db.imooc_collection.find().count()
db.imooc_collection.find().skip(3).limit(2).sort({x:1});
更新
db.imooc_collection.update({x:1},{x:999})
db.imooc_collection.find({x:999})
db.imooc_collection.insert({x:1,y:100,z:100})
db.imooc_collection.update({z:100},{$set:{y:99}}) --$set部分更新
db.imooc_collection.find({z:100})
更新不存在数据时自动创建
db.imooc_collection.find({y:100})
db.imooc_collection.update({y:100},{y:99},true)
默认更新查找的第一条数据
db.imooc_collection.insert({c:1})
db.imooc_collection.insert({c:1})
db.imooc_collection.insert({c:1})
db.imooc_collection.update({c:1},{c:2})
db.imooc_collection.find({c:1})
db.imooc_collection.update({c:1},$set:{c:2},false,true)--全部更新
删除默认删除查找到的所有
db.imooc_collection.remove() --报错
db.imooc_collection.remove({c:2})
db.imooc_collections.drop()--删除表
show tables
索引
db.imooc_collection.getIndexes() --查询索引
(1)_id索引
自动创建
(2)单键索引--值为单一值如字符串,数字,日期
db.imooc_collection.ensureIndex({x:1}) -x:1正向排序 -1负向排序
db.imooc_collection.find({x:1})
(3)多建索引--与单键索引创建方式相同,不同的是具有多个记录值,例如数组
db.imooc_collection.insert({x:[1,2,3,4,5]})
(4)复合索引---查询条件不只一个
插入{x:1,y:2,z:3}按照x和y的值查询
创建
db.imooc_collection.ensureIndex({x:1,y:1})
db.imooc_collection.find({x:1,y:2})
(5)过期索引
在一段时间后过期的索引,在索引过期后相应数据被删除
适合存储一些在一段时间过后就会失效的数据比如用户登录信息,存储的日志
时间不能是时间戳,删除过程耗时不定,如果时间是数组按最小数字执行
db.imooc_collection.ensureIndex({time:1},{expireAfterSeconds:10}) --10秒后删除
(6)全文索引
{author:"",title:"",articel:""}
db.articles.ensureIndex({key:"text"})
db.articles.ensureIndex({key1:"text",key2:"text"})
db.articles.ensureIndex({"$**":"text"})
怎么查
db.articles.find({$text:{$search:"coffee"}})
db.articles.find({$text:{$search:"aa"}})
db.articles.find({$text:{$search:"aa bb cc"}}) --包含aa或者bb或者cc
db.articles.find({$text:{$search:"aa bb -cc"}}) --包含aa或者bb不包含cc
db.articles.find({$text:{$search:"\"aa\" \"bb\" \"cc\"}}) --都得包含
全文索引相似度
$meta操作符:{score:{$meta:"textScore"}}
写在查询条件后面可以返回返回结果的相似度
与sort一起使用,可以达到实用效果
db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})
db.articles.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})
.sort({score:{$meta:"textScore"}})
限制每次查询只能指定一个$text
$text不能出现在$nor查询中
查询中有了$text,hint不再起作用
MongoDb全文索引不支持中文
设置索引名字
db.articles.ensureIndex({x:1,y:1,z:1,m:1},{name:"normal_index"})
db.articles.getIndexes()
唯一性唯一索引
db.collection.ensureIndex({},{unique:true/false})
稀疏性 默认不稀疏,改为true不必为不存在的文档建立索引
db.collection.ensureIndex({},{sparse:true/false})
db.imooc_collection.insert({"m":1})
db.imooc_collection.insert({"n":1})
db.imooc_collection.find({m:{$exists:true}})
db.imooc_collection.ensureIndex({m:1},{sparse:true})
db.imooc_collection.find({m:{$exists:false}})
db.imooc_collection.find({m:{$exists:false}}).hint("m_1")
(7)地理位置索引
2d平面索引
db.location.ensureIndex({w:"2d"})
取值范围精度[-180,180]维度[-90,90]精度超值会报错
db.location.insert({w:[180,90]})
db.location.insert({w:[170,90]})
db.location.insert({w:[160,90]})
near查询
db.location.find({w:{$near:[1,1]}})
db.location.find({w:{$near:[1,1],$maxDistance:10}})
2d时不支持minDistance
默认返回最接近的一百条
geoWithin查询,查询某个形状内的点
矩形$box
{$box:[[x1,y1],[x2,y2]]}
圆形$center
{$center:[[x1,y1],r]}
多边形$polygon
{$polygon:[[x1,y1],[x2,y2],[x3,y3]]}
db.location.find({w:{$geoWithin:{$box:[[0,0],[1,1]]}}})
geoNear查询
geoNear查询使用runCommand
db.runCommand(
{geoNear:<collection>,
near:[x,y],
minDistance:(对2d索引无效),
maxDistance:
num:
...
})
db.runCommand({geoNear:"location",near:[1,2],mixDistance:10,num:1})
2dshere球面地理位置索引(看文档)
db.location.ensureIndex({w:"2dsphere"})
位置表示
geoJson:描述一个点,直线,多边形
{type:""}
如何判断当前索引构建情况:
1.mongostat工具介绍
./mongostat --h
./mongostat -h 127.0.0.1:12345
2.profile集合介绍
db.getProfilingLevel()
db.getProfilingStatus()
db.setProfilingLevel(2) --记录我们所有操作
db.system.profile.find().sort({$nature:-1}).limit(1)
生产环境中不推荐使用
3.日志介绍
mongo.conf中
verbose = vvvvv --1到5个v
4.explain分析 特定查询是否使用索引
db.articles.find({x:1}).explain()
mongodb安全介绍
(1)auth开启权限
mongo.conf中auth = true
重启mongo
2.5版本之后
db.createUser({user:"imooc",pwd:"imooc",role:[{role:"userAdmin",db:"admin"},{role:"read",db:"test"}]})
用户角色和自定义用户角色看文档