MongoDB基础

1 基础概念

对比NoSQL:
实时一致性,事务,多表联合查询
简单便捷,方便扩展,更好性能

集合是一组文档,它类似于关系库的表;文档类似关系库的行。
多个集合组成数据库,一个实例可以承载多个数据库,每个数据库都有独立的权限。保留的数据库名称(admin,local,config)

2 MongoDB的优势

1)无数据结构限制:无表结构,SQL数据库需要先
2)完全的索引支持:redis的key-value ;hbase的单索引
3)方便的冗余与扩展:复制集保证数据安全;分片扩展数据规模

3 MongoDB的基础操作

##创建函数
> function aa(a,b){
... return a+b;
... }
> aa(8,9)
##插入对象
> stu={ name: 'chuyao', age: 11}
{ "name" : "chuyao", "age" : 11 }
> db.students.insert(stu)
WriteResult({ "nInserted" : 1 })

##更新对象
db.students.update({name:"chuyao"},stu)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.students.update({name:"chuyao"},{name:"hhh"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

##删除对象
> db.students.remove({name1:"chuyao"})
WriteResult({ "nRemoved" : 0 })

##练习操作

##创建一个学生信息表(至少包含:姓名,性别,成绩,年龄)
#写入十五条不同的数据
#查询所有的男生数据(只需要学生的姓名和年龄)
db.students.find({sex: 'male'}, {name: 1, age: true, _id: 0})
#查询成绩及格的学生信息(学生成绩大于或等于60分)
db.students.find({grade: {'$gte': 60}})
#查询所有18岁的男生和16岁的女生的数据
db.students.find({'$or': [{sex: 'male', age: 18}, {sex: 'female', age: 16}]})
#按照学生的年龄进行排序
db.students.find().sort({age: 1})
#将所有的女学生年龄增加一岁
db.students.update({sex: 'female'}, {'$inc': {age: 1}}, {multi: true})

db.immoc_collection.insert({x:1})//数据插入
db.imooc_collection.insert({x:3,_id:1})//指定key值插入value
db.imooc_collection.find({x:1})
db.imooc_collection.update({x:1},{x:999})
db.imooc_collection.insert({x:100,y:100,z:100})
db.imooc_collection.update({z:100},{$set:{y:99}})
db.imooc_collection.find({z:100})//查询

db.imooc_collection.update({y:10},{y:999},true)//更新原本不存在的数据,插入值
db.ic_collection.update({c:1},{$set:{c:2}},false,true)//更新满足条件的所有记录

db.imooc_collection.remove({})//删除数据

show tables//显示当前数据库表
db.immoc_collection.getIndexes()//获取索引
db.immoc_collection.ensureIndex({x:1})//创建索引 1:表示索引x按照升序;-1表示降序
db.immoc_collection.ensureIndex({"x":1},{"unique":true})//创建唯一性索引
/*删除索引*/
db.immoc_collection.dropIndex("x_2")
db.immoc_collection.dropIndex({x:2})
/*执行计划查询*/
db.immoc_collection.find({x:1}).explain()
/*cursor":"BasicCursor"表示没有使用索引。"
nscanned":1 表示查询了多少个文档。"
n":1 表示返回的文档数量。"
millis":0 表示整个查询的耗时。*/

4 索引

1)_id索引 、单建索引、多建索引、复合索引、过期索引、全文索引、地理位置索引
2)当我们的查询条件不只有一个时,我们就需要建立复合索引

插入{x:1,y:2,z:3}记录-》按照xy查询-》创建索引:db.table.ensureIndex({x:1,y:1})

3)过期索引:过一段时间后索引就会过期。索引过期后,相应的数据也会删除,适合存储用户的登录信息和存储的日志

db.ic.ensureIndex({time:1},{expireAfterSeconds:10})//十秒之后自动删除

必须是ISODate;如果指定了ISODate数组,按照最小的时间删除,过期索引不能是复合索引;删除时间并不精确
4)全文索引:{author:”“,title:”“,acticle:”“}

db.ic.ensureIndex({"article":"text"})//建立全文索引
db.ic.insert({"article":"asaasasas asa saa d ferfe rg"})
db.ic.find({$text:{$search:"aa"}})//查询的是单词
 db.ic.find({$text:{$search:"ff asas"}},{score:{$meta:"textScore"}})//查询并显示相似度
db.ic.find({$text:{$search:"ff asas"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})//查询并按照相似度排序

全文索引使用限制:每次查询只能指定一个$text查询;$text不能出现在$nor查询中,查询中如果包含了$text,hint不再起作用,不支持中文

5 MongoDB安全

1)物理隔离;网络隔离;防火墙;用户密码
2)auth开启;

vi /etc/mongodb.conf/*配置mongoDB,开启权限*/
auth=true
service mongodb restart/*重启服务*/

3)创建用户
角色类型:(read,readwrite,dbAdmin,dbOwner,userAdmin)

db.createUser({user:"name",pwd:"123456",roles:[{role:"read",db:"ic"}]})/*创建用户,且对数据库ic只读*/

/*退出客户端,使用新用户名登录*/
mongo -u name -p 123456

对该数据库的更新等操作会报错

4)MongoDb用户角色详解
数据库角色(read,readWrite…),集群角色(clusterAdmin,clusterManager..),备份角色(backup,restore),其他特殊权限(DBAdminAnyDatabase…)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值