-
一:mongoDB的基本概念
-
几个重要的网站
- mongoDB的官网:mongodb.org
- mongoDB国内官方网站,mongoing.com
- http://docs.mongoing.com/ 国内网站的文档子站 ,不是很完善db的
- mongodb的github
- mongodb的jir
- mongodb-cn,mongodb-user
-
为什么选择mongoDB?
- 无数据结构限制
- 没有表结构的概念,每条记录可以有完全不同的结构
- 业务开发方便快捷
- sql数据库需要事先定义表结构在使用
- 完全的索引支持
- redis的key-value(速度很快,但是只提供了一种查询方式,根据键查询,不够灵活)
- hbase,查询很快,但是是单索引,二级索引需要自己实现
- mogodb索引支持:单键索引、多建索引、数组索引、全文索引、地理位置索引
- 方便的冗余与拓展
- 复制集保证数据安全(一份数据保存3分,保证安全)
- 分片拓展数据规模,可以很方便的进行数据规模的拓展。包含了自动数据均衡,简单的扩容和缩容,同时t提供了对数据库的统一访问入口,不需要再应用层进行分发,减少了人力
- 良好的支持
- 完善的文档
- 齐全的驱动支持
- 无数据结构限制
-
-
mongoDB的安装和配置
-
mongoDb的增删改查
- 删除
- 删除一条数据:db.demo_1.remove({x:20})
- 删除数据表:db.demo_1.drop()
- 更新:
- 根据条件更新,更新数据全部字段(update)
- 更新_id=1的数据,数据更改为:x=123。db.demo_1.update({_id:1},{x:123})
- 更新_id=1的数据,数据更改为{z:123,a:1111}。db.demo_1.update({_id:1},{z:123,a:1111})
- 更新部分字段(update,set)
- db.demo_1.update({'_id':1},{$set:{'z':2222}})。注意:条件和数据的字段要和查询的数据保持一致
- 更新不存在的数据(update的第三个参数为true)
- 更新多条数据
- mongoDB默认是更新符合条件的第一条数据
- update第四个参数设置为true,并且只能使用set形式
- 根据条件更新,更新数据全部字段(update)
- 查询:
- 查询集合下的所有数据:db.demo_1.find()
- 查询条件:查询_id为1的数据:db.demo_1.find({_id:1})
- 查询集合下的总条数:db.demo_1.find().count()
- 复杂查询:从第几条开始返回几条按什么排序
- db.demo_1.find().skip(10).limit(3).sort({x:1})
- 查询集合下的所有数据:db.demo_1.find()
-
插入
-
db.数据集名称.insert(数据字符串)
- 例:db.demo_1.insert({x:2,_id:1})。_id是一个不能重复的值,可以指定,也可以由系统自动生成
- 批量插入
- for(i=3;i<=1000;i++)db.demo_1.insert({x:i})
-
- 删除
-
mongoDB的索引
-
MongoDB索引简介
-
索引的种类与使用
- _id索引
- _id索引是绝大多数集合默认建立的索引
- 对于每个插入的数据,mongoDB都会自动生成一条唯一的_id字段
- 单键索引
- 单键索引是最普通的索引
- 单键索引不会自动创建
- 语法:db.demo_1.ensureIndex({x:1})
- 多键索引
- 多键索引与单键索引创建形式相同,区别在于字段的值
- 单键索引:值为一个单一的值,例如字符串、数字和日期。
- 多键索引:值具有多个记录,例如数组。
- 示例:db.demo_1.insert({x:[1,2,3,4]})。插入一个x值为数组的数据,x如果ensureIndex建立了索引,则为多键索引
- 复合索引
- 当我们的查询条件不只有一个时,就需要建立符合索引
- 语法:db.demo_1.ensureIndex({x:1,y:1})。使用x,y条件进行查询就可以使用索引
- 过期索引
- 过期索引是在一段时间后会过期的索引
- 在索引过期后,相应的数据也会被删除
- 适合存储一些在一段时间之后会失效的数据,比如用户登录信息,存储日志。
- 使用限制:
- 存储在过期索引字段的值必须是自定的时间类型。必须是ISODate或者ISODate数组,不能使用时间戳,否则无法自动删除。
- 如果指定了ISODate数组,则按最小的删除
- 过期索引不能是复合索引
- 删除时间是不精确的
- 删除过程是由mongoDB在后台没60s跑一次的,而且删除也需要时间,所以有误差。
- 语法:
- 创建索引(time字段为索引,30秒后过期):db.demo_2.ensureIndex({time:1},{expireAfterSeconds:30})
- 增加数据:db.demo_2.insert({time:new Date()})。time字段,值为ISODate
- 全文索引
- 举例:
- 建立的语法:
- 在mongodb中,每一个数据集合只允许创建一个全文索引。
- 和建立普通索引一样,区别是普通索引的值为1或者-1,全文索引的值固定为text
- db.demo_2.ensureIndex({key:"text"})。根据单个字段key 建立全文索引
- db.demo_2.ensureIndex({key1:"text",key2:"text"})。
- db.demo_2.ensureIndex({"$**":"text"})。key不在是具体值,表示对集合中的所有字段创建一个大的全文索引
- 如何使用全文索引进行查询
- 单个关键词:db.demo_1.find($text:{$search:"wlz"})
- 多个关键词,用空格隔开,默认或关系:db.demo_1.find($text:{$search:"wlz xiaomin"})
- 多个关键词,不包含某关键词。
- db.demo_1.find($text:{$search:"wlz -xiaomin"})。(值有wlz,且不包含xiaomin)
- 多个关键字,每个关键字是与的关系。
- 关键字用双引号包起来就是且的关系。
- db.demo_1.find($text:{$search:"\"wlz\" xiaomin lic"})。必须有wlz且xiaomin或lic
- 全文索引相似度
- $meta操作符:{score:{$meta:"textScore"}}。
- 写在查询条件后面可以返回返回结果相似度score字段。
- 与sort一起使用可以达到很好的效果。
- 示例:
- db.demo_1.find({$text:{$search:"aa bb"}},{socre:{$meta:"textScore"}}).sort({socre:{$meta:"textScore"}})
- 全文索引的使用限制
- 每次查询只能指定一个$text查询
- $text查询不能出现在$nor查询中
- 查询中如果包含了$text,hint不在起作用。hint是强制使用某个索引
- mongoDB全文索引不支持中文(新版已经支持了)
- 地理位置索引
- 简介:
- 概念:将一些点的位置存储在mongodb中,创建索引后,可以按照位置来查找其他点。
- 子分类:
- 2d索引,用于存储和查找平面上的点
- 2dsphere,用于存储和查找球面上的点
- 两者的区别是计算距离使用平面距离还是球面距离
- 查找方式:
- 查找包含在某个区域内的点
- 查找距离某个点一定距离内的点
- 创建地理位置索引
- 2D索引
- 语法:db.location.ensureIndex({"w":"2d"})。
- 位置表示方式:经纬度[经度,纬度]。取值范围:经度[-180,180],纬度[-90,90]
- 插入数据:db.locaion.insert({w:[30,30]})
- 查询方式
- 查询方式:$near:查询距离某个点最近的点,默认查出来一百个,可以通过$maxDistance限制范围。
- $
- $
- 查询方式:$geoWithin:查询某个形状内的点。
- $box,矩形
- $center,圆形
- $polygon:多边形
- 示例:
- $box,矩形
- 查询方式3:$geoNear,比near更高级
- geoNear使用runCommand命令进行使用
- 查询方式:$near:查询距离某个点最近的点,默认查出来一百个,可以通过$maxDistance限制范围。
- 2Dsphere索引
- 概念:球面地理位置索引
- 创建方式:db.demo_1.ensureIndex({w:"2dsphere"})
- 位置表示方式:GeoJSON:描述一个点,一条直线,多边形等形状。
- 格式:json数据,有type和coordinates
- 查询方式和2D相似,但是支持$minDistance和maxDistance。
- 支持交叉点查询
- 2D索引
- 简介:
- _id索引
-
索引的属性
- 名字,name指定
- mongodb会默认给数据命名,一般是索引名称key_1。例:wlz_1_a_-1
- 组合索引这样使用系统自定义命名,可能会超出限制的字节长度,也不直观
- 语法:db_demo_2.ensureIndex({a:1},{name:"normal_index"})
- 删除索引的时候可以使用索引名称进行删除:db.demo_2.dropIndex("normal_index")。
- 索引的唯一性(unique)
- 语法:db_demo_2.ensureIndex({a:1},{unique:true})
- 则a字段数据唯一,类似于mysql的unique索引
- 稀疏性,sparse指定
- 语法:db_demo_2.ensureIndex({a:1},{sparse:true})
- 默认下,mogodb创建的索引都是不稀疏的
- 过期属性
- 使用expireAfterSeconds指定
- 语法:db.demo_2.ensureIndex({time:1},{expireAfterSeconds:30})
- 名字,name指定
-
索引的建立情况评估
- 索引的优缺点:
- 索引的好处:加快索引相关的查询
- 索引的不好:增加磁盘空间消耗,写入速度变慢。
- 如何判断当前索引情况
- mongostat工具
- profie集合介绍
- 日志介绍
- explain介绍
- mongostat工具
- 索引的优缺点:
-
-
mongodb入门
最新推荐文章于 2025-04-10 10:32:17 发布