文档菜单
文档首页
/
MongoDB 手册
/ / / /

$near

在本页

  • 定义
  • 行为
  • 示例
$near

指定一个点,对于该点,地理空间查询按从近到远的顺序返回文档。地理空间查询返回从最近到最远的文档。运算符$near可以指定一个GeoJSON点或旧坐标点。

$near需要一个地理空间索引

  • 2dsphere索引,如果指定了一个GeoJSON点。

  • 2d索引,如果使用旧坐标指定一个点。

要指定一个GeoJSON点,运算符

{
<location field>: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ <longitude> , <latitude> ]
},
$maxDistance: <distance in meters>,
$minDistance: <distance in meters>
}
}
}

重要

如果指定经纬度坐标,请先列出经度,然后是纬度

  • 有效的经度值介于 -180180 之间,包括两端。

  • 有效的纬度值介于 -9090 之间,包括两端。

当指定一个GeoJSON点时,可以使用可选的$minDistance$maxDistance规范来限制$near结果,通过来衡量距离。

  • $minDistance将结果限制在距离中心点至少指定距离的文档。

  • $maxDistance将结果限制在距离中心点最多指定距离的文档。

要使用旧坐标指定一个点,$near需要一个2D索引,并且具有以下语法

{
$near: [ <x>, <y> ],
$maxDistance: <distance in radians>
}

当指定旧坐标时,可以使用可选的$maxDistance规范来通过弧度限制$near结果。 $maxDistance将结果限制在距离中心点最多指定距离的文档。

您不能将需要特殊地理空间索引$near运算符与需要另一个特殊索引的查询运算符或命令组合。例如,您不能将$near$text查询组合。

$near运算符按距离对文档进行排序。

  • 如果您在查询中使用sort()方法,MongoDB将执行第二个排序操作,重新排序匹配的文档。在查询大型集合时,这可能会对查询性能产生负面影响。

  • 如果文档的顺序对您不重要,请考虑使用$geoWithin运算符,因为它返回未排序的结果。

  • $near是一个匹配执行运算符,不允许在聚合管道中使用。

从 MongoDB 8.0 开始,$near$nearSphere$geoNear 验证指定的 GeoJSON 点 类型必须是 Point。任何其他输入类型都会返回错误。

重要

如果指定经纬度坐标,请先列出经度,然后是纬度

  • 有效的经度值介于 -180180 之间,包括两端。

  • 有效的纬度值介于 -9090 之间,包括两端。

考虑一个具有 2dsphere 索引的集合 places

以下示例返回距离指定 GeoJSON 点至少 1000 米且最多 5000 米的文档,按从近到远排序。

db.places.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)

重要

如果指定经纬度坐标,请先列出经度,然后是纬度

  • 有效的经度值介于 -180180 之间,包括两端。

  • 有效的纬度值介于 -9090 之间,包括两端。

考虑一个具有 2d 索引的集合 legacy2d

以下示例返回距离指定的旧坐标系坐标对最多为 0.10 弧度的文档,按从近到远排序

db.legacy2d.find(
{ location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)

返回

$geoWithin