翻译或纠错本页面
创建一个 2d 索引¶
On this page
To build a geospatial 2d index, use the db.collection.createIndex() method and specify 2d. Use the following syntax:
db.<collection>.createIndex( { <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 地理索引。在创建索引时使用 min 和 max 选项。格式如下:
db.collection.createIndex( { <location field> : "2d" } ,
{ min : <lower bound> , max : <upper bound> } )
为 2d 索引指定位置精度¶
默认地,普通坐标对的 2d 索引的精度是26位,亦即大约是2英尺或者60厘米,当默认的范围是-180到180时。精度是以存储位置数据的 geohash 值的位数来衡量的。您可以将地理索引的精度调整到32位。
索引经度并不会影响查询准确性。最终查询的处理过程会使用实际坐标。更低精度的优势在于插入操作时更少的处理代价和更少的空间消耗。更高精度的优势在于查询只需要扫描索引的更小比例来返回结果。
如果需要将默认经度设置为其他,可以在创建索引时使用 bits 选项。格式如下:
db.<collection>.createIndex( {<location field> : "<index type>"} ,
{ bits : <bit precision> } )
For information on the internals of geohash values, see 为 2d 索引计算Geohash值.