目录
1、_id索引:
2、单键索引:
3、多建索引:
4、复合索引:
5、过期索引:
6、全文索引:
7、地理位置索引:
(1)2D索引:
(2)2Dsphere索引:
是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段 。
单键索引是最普通的索引,与_id索引不同,单键索引不会自动创建。单键索引的值为一个单一的值,如字符串,数字或日期。
创建索引:
db.imooc_2.ensureIndex({x:1});
查看索引:
db.imooc_2.getIndexes();
多键索引与单键索引创建形式相同,区别在于字段的值。多键索引的值具有多个记录,如数组。而单键索引的值为一个单一的值,如字符串,数字或日期。
创建索引:
db.imooc_2.ensureIndex({x:1});
查看索引:
db.imooc_2.getIndexes();
查询多个条件时,建立复合索引。
创建索引:
db.imooc_2.ensureIndex({x:1,y:-1});
查看索引:
db.imooc_2.getIndexes();
在一段时间后会过期的索引,在索引过期后,相应的数据会被删除。适合存储在一段时间之后会失效的数据,比如用户的登录信息、存储的日志等。个人角色此索引不太常用。
创建索引:
#time索引30秒后失效
db.imooc_2.ensureIndex({time:1},{expireAfterSeconds:30});
查看索引:
db.imooc_2.getIndexes();
过期索引的限制:
存储在过期索引字段的值必须是指定的时间类型,必须是ISODate或者ISODate数组,不能使用时间戳,否则不能自动删除。例如db.imooc_2.insert({time:1}),这种是不能被自动删除的
如果指定了ISODate数组,则按照最小的时间进行删除。
过期索引不能是复合索引。因为不能指定两个过期时间。
删除时间是不精确的。删除过程是由MongoDB的后台进程每60s跑一次的,而且删除也需要一定时间,所以存在误差。
对字符串与字符串数组创建全文课搜索的索引,个人感觉不太好,如果需要使用全文检索可以将数据迁移到elasticsearch中,elasticsearch做全文检索性能非常好。
在mongodb中创建全文索引的语法就不写了,如果一定需要再自行了解吧。
将一些点的位置存储在MongoDB中,创建索引后,可以按照位置来查找其他点。这个类似地图中的功能:查找距离某个点一定距离内的点、查找包含在某区域内的点。此索引对于经纬度等位置数据处理非常有用。
地理位置索引分为两类:
2D索引,用于存储和查找平面上的点。
2Dsphere索引,用于存储和查找球面上的点。
创建索引:db.collection.ensureIndex({w:”2d”});
2D地理位置索引经纬度取值范围:经度[-180,180]、纬度[-90,90]。
使用$near查询:
距离某个点最近的点 ,默认返回最近的100个点:
db.collection.find({w:{$near:[x,y]}});
可以使用$maxDistance:x 限制返回的最远距离:
db.collection.find({w:{$near:[x,y],$maxDistance:z}})
使用$geoWithin查询:
查询某个形状内的点,形状的表示方式:
$box 矩形,使用{$box:[[x1,y1],[x2,y2]]}
$center 圆形,使用 {$center:[[x,y],r]}
$polygon 多边形,使用 {$polygon:[[x1,y1],[x2,y2],[x3,y3]]}
查询矩形中的点
db.collection.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}})
查询圆中的点
db.collection.find({w:{$geoWithin:{$center:[[0,0],5]}}})
查询多边形中的点
db.collection.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}})
创建索引:db.collection.ensureindex({key: '2dsphere'});
2Dsphere位置表示方式: GeoJSON,描述一个点,一条直线,多边形等形状。{type:'', coordinates:[list]};GeoJSON查询可支持多边形交叉点等,支持MaxDistance和MinDistance。