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

固定集合必须在使用之前显式创建。

创建大小为1000,文档数量为100的固定集合coll:

mongodb locks 集合 mongodb固定集合_索引


固定集合创建后,就不能改变。为固定集合指定文档数量限制时,必须同时指定固定集合的大小。不管达到哪个限制条件,之后插入的新文档会把老文档挤出集合。将常规集合转换为固定集合,但是无法将固定集合转换为非固定集合:

mongodb locks 集合 mongodb固定集合_2d_02

自然排序

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

mongodb locks 集合 mongodb固定集合_索引_03

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

TTL索引(time-to-live)

这种索引允许为每一个文档设置一个超时时间,一个文档到达预设值的老化程度之后就会被删除。键值是时间类型:

mongodb locks 集合 mongodb固定集合_索引_04


当服务器时间比文档的”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:纬度

mongodb locks 集合 mongodb固定集合_索引_05


线:用一个由点组成的数组表示,类型type:LineString

mongodb locks 集合 mongodb固定集合_数组_06


多边形:也是一个有点组成的数组,但是类型不一样,type:Polygon:

mongodb locks 集合 mongodb固定集合_索引_07


“loc”字段的名字可以是任意的,但是其中子对象是由GeoJSON指定的,不能改变。

创建地理空间索引:

mongodb locks 集合 mongodb固定集合_索引_08

地理空间查询类型

将希望查找的内容指定为形如 {“$geometry”:geoJsonDesc}的GeoJSON对象。其中geoJsonDesc={type: Point | LineString | Polygon ,coordinates:[[2,1],[2,5],[6,5]]}

mongodb locks 集合 mongodb固定集合_mongodb_09


要查询的文档:

mongodb locks 集合 mongodb固定集合_mongodb locks 集合_10


1)包含:可以查询包含(inclusion)在指定的多边形区域内的locations(所对应的documents,或者indexes),使用$geoWithin操作符。2d和2dsphere都支持包含查询。

mongodb locks 集合 mongodb固定集合_mongodb locks 集合_11


2)相交(intersection):可以查询与指定的几何体相交的locations,仅支持球面数据,即2dsphere索引,使用$geoIntersects操作。

mongodb locks 集合 mongodb固定集合_2d_12


3)临近(proximity):可以查询与指定的point最近的其他points,使用$near操作,2d和2dsphere都支持。

mongodb locks 集合 mongodb固定集合_索引_13


“$near”是唯一一个会对查询结果进行自动排序的地理空间操作符,返回的结果按照距离由近及远排序。

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

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

(二)2d索引

2d索引用于扁平表面,而不是球体表面。文档中使用包含两个元素的数组表示2d索引字段。它只能对点进行索引。可以保存一个由点组成的数组,不会被当成线。

mongodb locks 集合 mongodb固定集合_索引_14


默认情况下,地理空间索引假设值都是位于[-180,180],也可以设置索引边界值:

mongodb locks 集合 mongodb固定集合_mongodb locks 集合_15


2d查询不必带有”$geometry”子对象,默认会返回100个文档:

mongodb locks 集合 mongodb固定集合_2d_16


查询某个形状(矩形,圆形)范围内的所有文档。

矩形:指定”$box”选项,第一个元素指定左下角坐标,第二个元素指定右上角坐标:

mongodb locks 集合 mongodb固定集合_2d_17


圆形:指定”$center”选项,第一个元素指定圆心,第二个参数指定半径。

mongodb locks 集合 mongodb固定集合_mongodb_18


多边形:指定”$polygon”选项,参数是多个点组成的数组:

mongodb locks 集合 mongodb固定集合_数组_19

(三)GridFS存储文件