mongoDB - 索引
-
意义使用索引可以显著地加快查询速度
-
索引的种类
- _id索引
- 绝大部分集合默认建立的索引
- 单键索引
- 最普通的索引
- 单键索引不会自动创建
- 创建方式:
- 多键索引
- 与单键索引创建形式相同,区别在于字段的值
- 单键索引:职位单一值,如字符串,数字日期等 / 多键索引:例如数组;
- 复合索引
- 当查询条件不唯一时,建立复合索引
- 创建方式:
- 过期索引
- 一段时间后过期的索引
- 索引过期后,相应数据会被删除
- 适合存储在一段时间后会失效的数据,比如用户的登录数据、存储日志等
- 存储在过期索引字段的值必须是指定的时间类型(必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除)
- 如果指定了ISODate数组,则按照最小的时间进行删除
- 过期索引不能是复合索引
- 删除时间是不精确的
- 创建方式:
- 全文索引
- mongoDB中每个collections只能创建一个全文索引
- 创建方法:
- 使用【db.collection.find($text:{$search:“aa bb -cc”}})】表示:查询所有包含aa 或 bb 不含 cc的结果
- 使用【db.collection.find($text:{$search:"\“aa\” \“bb\” \“cc\”"}})】表示包含 aa bb cc字符串的结果
- [相似度] $meta操作符:
- {score:{$meta:“textScore”}} 写在查询条件后面可以返回结果的相似度
- 与sort一起使用;
- 全文索引的使用限制
- 每次查询,只能指定一个$text查询
- $text查询不能出现在 $nor查询中
- 查询中如果包含了$text,hint不起作用
- 全文索引还不支持中文(2014)
- 地理位置索引
- 概念
将一些点的位置存储在MongoDB中,创建索引后可以按照位置查找其他点。 - 子分类:
- 2d索引,用于存储和查询平面上的点;
- 2dsphere索引,用于查询和查找球面上的点
- 查找方式:
- 查找距离某个点一定距离内的点
- 查找包含在某区域内的点
- 2d索引:
- 创建:db.location.ensureIndex({w:“2d”})
- 插入:db.location.insert({w:[100,100]})
- 查找:db.location.find({w:{$near:[1,1]}})
- 查找(设限): db.location.find({w:{$near:[1,1],$maxDistance:10}})
- 查询某形状内数据: 使用 $geoWithin
- $box:矩形 {$box:[[<x1>,<y1>],[<x2>,<y2>]}
- $center:圆形 {$center:[[<x1>,<y1>],r]}
- $polygon:多边形 {$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]} - geoNear查询:
- 2dsphere索引:
- 概念:球面地理位置索引
- 创建方式:db.imooc2.ensureIndex({w:“2dsphere”})
- 位置表示方式:GeoJSON描述一个点、直线、多边形等形状
- 格式:{type:"",coordinates:[<coordinates>]}
- 概念
- _id索引
-
索引属性
- 命名
db.imooc2.ensureIndex({x:1,y:1,z:1,m:1},{name:“normal_index”}) - 删除
db.imooc2.dropIndex(“normal_index”) - 查询
db.imooc2.getIndexes() - 唯一性 unique
db.imooc2.ensureIndex({},{unique:true/false}) - 稀疏性sparse
db.imooc2.ensureIndex({},{sparse:true/false}) - 定时删除
- 命名