地理空间查询
最后更新于
最后更新于
在本页面:
MongoDB支持对地理空间数据的查询操作。 本节介绍MongoDB的地理空间功能。
在MongoDB中,您可以将地理空间数据存储为 对象或遗留坐标对。
要计算类地球体的几何形状,请将位置数据存储为。
要指定GeoJSON数据,请使用嵌入的文档:
一个名为type的字段,用于指定GeoJSON对象类型
一个名为坐标的字段,用于指定对象的坐标。
如果指定纬度和经度坐标,请先列出经度,然后再列出纬度:
有效的经度值在**-180到180**之间(包括两者)。
有效的纬度值在**-90到90**之间(包括两者之间)。
要将数据指定为旧版坐标对,可以使用数组(首选)或嵌入式文档。
如果指定纬度和经度坐标,请先列出经度,然后再列出纬度; 即:
有效的经度值在**[-180 180]**。
有效的纬度值在**[-90 90]**。
如果指定纬度和经度坐标,第一个字段必须包含经度值,而第二个字段必须包含纬度值;即。
有效的经度值在**[-180 180]**。
有效的纬度值在**[-90 90]**。
为了指定旧版坐标对,数组比嵌入式文档更可取,因为某些语言不能保证关联地图的排序。
MongoDB提供以下地理空间索引类型以支持地理空间查询。
2dsphere
索引支持查询,该查询可在类似地球的球体上计算几何形状。
其中**<location field
>**是其值为GeoJSON对象或旧版坐标对的字段。
2d
地理空间索引和分片集合
分片集合时,不能将地理空间索引用作分片键。但是,可以通过使用不同的字段作为分片键在分片集合上创建地理空间索引。
分片集合支持以下地理空间操作:
涵盖查询
[success] Note
对于球形查询,请使用2dsphere索引结果。
将2d索引用于球形查询可能会导致错误的结果,例如将2d索引用于环绕两极的球形查询。
MongoDB提供以下地理空间查询操作符:
有关更多细节(包括示例),请参见个别参考页面。
MongoDB提供以下地理空间聚合管道阶段:
MongoDB地理空间查询可以解释平面或球体上的几何。
2dsphere索引仅支持球形查询(即解释球形表面几何形状的查询)。
2d索引支持平面查询(即解释平面上的几何图形的查询)和某些球形查询。 虽然2d索引支持某些球形查询,但是将2d索引用于这些球形查询可能会导致错误。 如果可能,请对球形查询使用2dsphere索引。
下表列出了每个地理空间操作所使用的地理空间查询运算符,受支持的查询:
球形
平面
球形
提供与使用GeoJSON点和2dsphere索引的$ near操作相同的功能。对于球形查询,最好使用$ nearSphere而不是$ near运算符,后者在名称中显式指定球形查询。
球形
球形
平面
平面
平面
球形
球形
球形
平面
用以下文档创建一个集合places:
以下操作在location字段上创建2dsphere索引:
以下操作使用geoNear聚合操作返回与查询过滤器**{category:“ Parks”}**匹配的文档,这些文档按从最接近指定GeoJSON点的最近到最远的顺序排序:
译者:杨帅
校对:杨帅
例如,要指定::
有关MongoDB支持的GeoJSON对象的列表以及示例,请参阅。
对GeoJSON对象的MongoDB地理空间查询是在球体上计算的; MongoDB使用参考系统对GeoJSON对象进行地理空间查询。
在欧几里德平面上计算距离,请将您的位置数据存储为旧坐标对并使用索引。 通过将数据转换为GeoJSON Point类型,MongoDB支持通过索引对旧坐标对进行球面计算。
要创建2dsphere索引,请使用方法并指定字符串文字“ 2dsphere”作为索引类型:
有关2dsphere索引的更多信息,请参见索引。
索引支持在.尽管索引可以支持在球上进行计算的查询,但如果可能,请对球面查询使用索引。
要创建2d索引,请使用方法,将location字段指定为键,并将字符串文字**“ 2d”**指定为索引类型:
其中**<location field
>**是一个值为的字段。
有关2d索引的更多信息,请参见。
聚集阶段
和查询运算符(从MongoDB 4.0开始).
从MongoDB 4.0开始,分片集合支持 和 查询。
在早期的MongoDB版本中,分片集合不支持 和 查询。相反,对于分片群集,必须使用聚合阶段或geoNear命令(在MongoDB 4.0及更低版本中可用)。
您还可以使用和**$geoIntersect**查询分片群集的地理空间数据。
不能。
选择与几何形状相交的几何形状。 索引支持.
选择边界图形内的几何图形。和2d索引支持.
返回球体上某个点附近的地理空间对象。 需要地理空间索引。 和索引支持.
返回接近球体上某一点的地理空间对象。需要地理空间索引。和索引支持.
根据与地理空间点的接近程度返回有序的文档流。 合并了地理空间数据的, , 和 功能。 输出文档包括附加距离字段,并且可以包括位置标识符字段。 需要一个。
有关更多详细信息(包括示例),请参见参考页。
( centroid point in this line and the following line, index)
另请参见 运算符,该运算符与GeoJSON和2dsphere索引一起使用时提供相同的功能。
(, index)
( point, index)
(, index)
请改用 点。
: { : … }
: { : … }
: { : … }
: { : … }
: { : … }
aggregation stage ( index)
aggregation stage ( index)
以下查询使用运算符返回距指定GeoJSON点至少1000米,最多5000米的文档,并按从最近到最远的顺序排序: