OPTIONS
翻译或纠错本页面

地理空间索引和查询

MongoDB提供了一系列的索引和查询机制来处理地理空间信息。这一节会介绍MongoDB的地理索引特性。您可以阅读 地理索引教程 来了解关于MongoDB中地理查询的完整示例。

表面

在您存储地理数据和编写查询条件前,首先,您必须选择表面类型,这将被用在计算中。您所选择的类型将会影响您的数据如何被存储,建立的索引的类型,以及您的查询的语法形式。

MongoDB提供了两种表面类型:

球面

如果需要计算地理数据就像在一个类似于地球的球形表面上,您可以选择球形表面来存储数据,这样就可以使用 2dsphere 索引。

您可以按照坐标轴:经度,纬度 的方式把位置数据存储为GeoJSON对象。GeoJSON的坐标参考系使用的是 WGS84 数据。

平面

如果需要计算距离,就像在一个欧几里德平面上,您可以按照正常坐标对的形式存储位置数据并使用 2d 索引。

位置数据

如果您选择球形表面来计算,您可以选择把位置数据存储为如下两种格式之一:

GeoJSON对象

GeoJSON 的查询总是基于球形表面。GeoJSON的默认坐标参考系使用的是 WGS84 数据。

2.4 新版功能: 在版本2.4新引入了对GeoJSON的存储和查询支持。在版本2.4以前,所有的地理数据使用坐标对的形式。

在 2.6 版更改: 支持更多GeoJSON类型:多点, 多线段, MultiPolygon, 几何体集合。

MongoDB支持如下GeoJSON对象:

  • 单点

  • 线段

  • 多边形

  • 多点

  • 多线段

  • MultiPolygon
  • 几何体集合

普通坐标对

MongoDB支持对使用 2dsphere 索引的 legacy coordinate pairs (普通坐标对)数据进行球面计算,方式是把数据转换成GeoJSON Point类型。

如果您选择的是平面计算且使用 2d 索引,那么您可以把数据存储为仅 :term:`legacy coordinate pairs`格式。

查询操作

MongoDB地理空间查询操作允许您查询:

包含

MongoDB可以查询被完全包含于一个指定多边形区域中的位置。包含查询使用的是 $geoWithin 操作符。

两种索引 2d2dsphere 索引都支持包含查询。在版本2.2.3之后,对于包含查询,MongoDB不再要求有索引。但是,这些索引可以提升查询性能。

交叉

MongoDB可以查询位置和一个指定几何图形的交叉。这些查询仅可以被用于查询存储在球形平面上的数据。这些查询使用 $geoIntersects 操作符。

只有 2dsphere 索引才支持交叉。

邻近

MongoDB可以查询和某个点最近的其他点。邻近查询使用 $near 操作符。 $near 操作符要求有 2d 或者 2dsphere 索引。

地理空间索引

MongoDB提供了如下的地理索引类型来支持地理查询。

2dsphere

2dsphere 索引可以支持如下特性:

  • 在球形平面上的计算

  • GeoJSON对象和对普通坐标对的向后兼容。

  • 复合索引。这个复合索引可以包含一个 2dsphere 索引字段以及一些按升序或降序建立的普通索引字段(作为 2dsphere 索引的前缀或者后缀)。

2.4 新版功能: 在版本2.4之前``2dsphere`` 索引是不可用的。

2d

2d 索引支持如下特性:

  • 使用平面几何的方式计算

  • 普通坐标对(比如,在一个平面坐标系中的点)

  • 作为复合索引,额外索引一个键。方法是,把额外的一个键作为 2d 索引键的后缀

地理空间索引和分片

不能 使用地理索引来作为 shard key 索引。

您可以在一个被分片的集合上创建并维护一个一个地理空间索引,使用的不能是分片键。

对于被分片的几何,使用了 $near 操作的查询是不被支持的。作为替代,您可以使用 geoNear 命令或者 $geoNear 在聚合阶段的时候。

您还可以使用 $geoWithin 来查询地理空间数据。

其它资源

以下页面提供了关于地理空间索引和查询的完整文档

2dsphere 索引

MongoDB的 2dsphere 索引支持查询在一个类地球的球面上进行几何计算。 索引支持以GeoJSON对象或者普通坐标对的方式存储数据。

2d 索引

MongoDB的 2d 索引支持以普通坐标对的方式存储数据,用于MongoDB2.2版及以前

geoHaystack 索引

haystack索引是一个被特殊优化过的索引,用于返回小区域结果。对于那些使用球面几何的查询而言, 2dsphere 会是一个更好的选择。

2d 索引原理

提供了对地理索引更深层次本质的阐释。这份材料对于普通操作者不是必须的,但是对于正在排除障碍或者想要更深入理解的用户也许有点帮助。