MongoDB特殊索引与集合

一、固定集合
普通集合是动态创建的,可以自动增长以容纳更多的数据。而固定集合要事先创建,它的大小是固定的。固定集合类似于循环队列,当没有空间,最老的文档会被删除以释放空间。数据被顺序写入磁盘的固定空间。
固定集合不能被分片。

固定集合必须在使用之前显式创建。
创建大小为1000,文档数量为100的固定集合coll:
这里写图片描述
固定集合创建后,就不能改变。为固定集合指定文档数量限制时,必须同时指定固定集合的大小。不管达到哪个限制条件,之后插入的新文档会把老文档挤出集合。

将常规集合转换为固定集合,但是无法将固定集合转换为非固定集合:
这里写图片描述

自然排序
自然排序返回结果集中文档的顺序就是文档在磁盘上的顺序。固定集合中的文档是按照文档被插入的顺序保存的,自然顺序就是文档的插入顺序。
这里写图片描述

循环游标
循环游标在结果集取光之后不会被关闭,当有新文档插入到集合中时,循环游标会继续取到结果。如果超过10分钟没有新结果,循环游标就会被释放,也可以人为终止查询。

TTL索引(time-to-live)
这种索引允许为每一个文档设置一个超时时间,一个文档到达预设值的老化程度之后就会被删除。键值是时间类型:
这里写图片描述
当服务器时间比文档的”createDate”字段的时间晚”expireAfterSeconds”秒时,文档就会被删除。
一个集合上可以有多个TTL索引,但是TTL索引不能是复合索引。

二、全文本索引

三、地理空间索引
1、2dsphere索引:用于地球表面类型的地图
该索引允许使用GeoJSON格式指定点、线和多边形。
mongodb支持如下几种GeoJSON对象:
1)Point:点
2)LineString:线段
3)Polygon:多边形
4)MultiLineString:多条线段
5)MultiPoint:多点
6)MultiPolygon:多个多变形
点:使用[x,y]的两个元素的数组表示经纬度信息(-180 ~ 180),类型type:Point。x:经度;y:纬度
这里写图片描述
线:用一个由点组成的数组表示,类型type:LineString
这里写图片描述
多边形:也是一个有点组成的数组,但是类型不一样,type:Polygon:
这里写图片描述
“loc”字段的名字可以是任意的,但是其中子对象是由GeoJSON指定的,不能改变。
创建地理空间索引:
这里写图片描述

地理空间查询类型
将希望查找的内容指定为形如 {“$geometry”:geoJsonDesc}的GeoJSON对象。其中geoJsonDesc={type: Point | LineString | Polygon ,coordinates:[[2,1],[2,5],[6,5]]}
这里写图片描述
要查询的文档:
这里写图片描述
1)包含:可以查询包含(inclusion)在指定的多边形区域内的locations(所对应的documents,或者indexes),使用$geoWithin操作符。2d和2dsphere都支持包含查询。
这里写图片描述
2)相交(intersection):可以查询与指定的几何体相交的locations,仅支持球面数据,即2dsphere索引,使用$geoIntersects操作。
这里写图片描述
3)临近(proximity):可以查询与指定的point最近的其他points,使用$near操作,2d和2dsphere都支持。
这里写图片描述
“$near”是唯一一个会对查询结果进行自动排序的地理空间操作符,返回的结果按照距离由近及远排序。

不需要地理空间索引就可以使用”$geoIntersects”或者”$geoWithin”,但是”$near”需要使用索引。

复合地理空间索引
可以将地理空间索引与其他字段组合在一起使用。将能够过滤掉尽可能多结果的字段放在索引的前面。

(二)2d索引
2d索引用于扁平表面,而不是球体表面。文档中使用包含两个元素的数组表示2d索引字段。它只能对点进行索引。可以保存一个由点组成的数组,不会被当成线。
这里写图片描述
默认情况下,地理空间索引假设值都是位于[-180,180],也可以设置索引边界值:
这里写图片描述
2d查询不必带有”$geometry”子对象,默认会返回100个文档:
这里写图片描述
查询某个形状(矩形,圆形)范围内的所有文档。
矩形:指定”$box”选项,第一个元素指定左下角坐标,第二个元素指定右上角坐标:
这里写图片描述
圆形:指定”$center”选项,第一个元素指定圆心,第二个参数指定半径。
这里写图片描述
多边形:指定”$polygon”选项,参数是多个点组成的数组:
这里写图片描述

(三)GridFS存储文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值