OPTIONS
翻译或纠错本页面

创建一个 2d 索引

需要创建 2d 索引的话,可以使用 ensureIndex() 方法并指定为 2d 。格式如下:

db.<collection>.ensureIndex( { <location field> : "2d" ,
                               <additional field> : <value> } ,
                             { <index-specification options> } )

MongoDB中 2d 索引可以选择使用如下索引明细选项:

{ min : <lower bound> , max : <upper bound> ,
  bits : <bit precision> }

2d 索引指定位置范围

默认情况下, 2d 索引假定经度和纬度的边界范围都是从-180到180且不包括180, 亦即 [ -180 , 180 ) 。如果文档中包含的坐标数据超出了指定范围,MongoDB会返回一个错误。

重要

默认边界允许应用插入大于90或小于-90的不合理纬度值的文档。而对于这样不合理的点的地理查询,数据库行为是未定义的。

2d 索引是您可以更改位置范围。

您可以创建一个不同于默认位置范围的 2d 地理索引。在创建索引时使用 minmax 选项。格式如下:

db.collection.ensureIndex( { <location field> : "2d" } ,
                           { min : <lower bound> , max : <upper bound> } )

2d 索引指定位置精度

默认地,普通坐标对的 2d 索引的精度是26位,亦即大约是2英尺或者60厘米,当默认的范围是-180到180时。精度是以存储位置数据的 geohash 值的位数来衡量的。您可以将地理索引的精度调整到32位。

索引经度并不会影响查询准确性。最终查询的处理过程会使用实际坐标。更低精度的优势在于插入操作时更少的处理代价和更少的空间消耗。更高精度的优势在于查询只需要扫描索引的更小比例来返回结果。

如果需要将默认经度设置为其他,可以在创建索引时使用 bits 选项。格式如下:

db.<collection>.ensureIndex( {<location field> : "<index type>"} ,
                             { bits : <bit precision> } )

参见 为 2d 索引计算Geohash值 了解更多geohash值的内在机制。