GeoJSON 对象
1 | <field>: { |
传统坐标对
1 | 数组型 |
地理空间索引
2dsphere
2dsphere 索引支持在类地球体上计算几何图形的查询
1 | 创建 2dsphere 索引: |
其中 <location field>
是一个字段,其值为 GeoJSON 对象或传统坐标对
2d
2d索引支持在二维平面上计算几何的查询, 可以支持 $nearSphere 在球面上计算的查询。(适用于 MongoDB 2.2 及更早版本)
1 | db.collection.createIndex( { <location field> : "2d" } ) |
其中 <location field>
是一个字段,其值为传统坐标对。
地理空间查询运算符
名称 | 描述 |
---|---|
$geoIntersects | 选择与 GeoJSON 几何相交的几何。 2dsphere 索引支持 $geoIntersects。 |
$geoWithin | 在边界GeoJSON 几何中选择几何。 2dsphere 和 2d 指标支持 $geoWithin。 |
$near | 返回点附近的地理空间对象。需要地理空间索引。 2dsphere 和 2d 指标支持 $near。 |
$nearSphere | 返回球体上某个点附近的地理空间对象。需要地理空间索引。 2dsphere 和 2d 指标支持 $nearSphere。 |
地理空间聚合阶段
$geoNear
按离指定点最近到最远的顺序输出文档。
1 | { $geoNear: { |
字段 | 类型 | 描述 |
---|---|---|
distanceField | string | 包含计算距离的输出字段 |
distanceMultiplier | number | 可选的。乘以查询返回的所有距离的因子。例如,使用 distanceMultiplier 将球面查询返回的弧度乘以地球的半径来转换为公里 |
includeLocs | string | 可选的。这指定了标识用于计算距离的位置的输出字段。当位置字段包含多个位置时,此选项很有用 |
key | 可选的。指定计算距离时要使用的地理空间索引字段。如果您的集合具有多个2d和/或多个2dsphere 索引,则必须使用该key选项来指定要使用的索引字段路径 | |
maxDistance | number | 可选的。到中心点的最大距离 |
minDistance | number | 可选的。到中心点的最小距离 |
near | GeoJSON 或 传统坐标对 | 查找最近文档的点 |
query | document | 查询的匹配条件 |
spherical | boolean | 可选的。确定 MongoDB 如何计算两点之间的距离。 |
false**:MongoDB 使用 $near 语义:2dsphere 索引的球面几何和 2d 索引的平面几何 | ||
uniqueDocs | boolean | 可选的。如果此值为true,则查询会返回匹配的文档一次,即使文档的多个位置字段与查询匹配也是如此(2.6版后已弃用) |
- 只能使用$geoNear作为管道的第一阶段。
- 必须包含
distanceField
字段。 $geoNear
需要地理空间索引,如果集合中有多个地理空间索引,请使用 keys参数指定要在计算中使用的字段。如果您只有一个地理空间索引,则$geoNear隐式使用索引字段进行计算。- 不能在
$geoNear
阶段的查询字段中指定 $near 谓词 - 视图不支持 geoNear 操作
- 从 4.2 版开始,$geoNear 不再有 100 个文档的默认限制
示例 1:
查找距离 [ -73.99279 , 40.719296 ] 点最小距离 2m ,并且 category 是 Parks 的所有文档
1 | db.citys.aggregate([ |
示例2:一个集合有多个地理空间索引
places 集合中 location
字段有一个 2dsphere 索引, legacy
字段有一个 2d 索引 如下:
1 | { |
使用 key
选项来指定聚集应该使用 location
的字段值的 $geoNear
操作,而不是 legacy
字段值
1 | db.places.aggregate([ |
案例
1 | 创建集合 |