Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

$near

在此页面上

  • 定义
  • 行为
  • 示例
$near

指定一个点, 地理空间查询将返回从最近到最远的文档。 $near操作符可以指定GeoJSON点或传统坐标点。

$near 需要地理空间索引:

  • 如果指定了 GeoJSON 点,则为 2dsphere 索引。

  • 如果使用传统坐标指定了点,则为 2d 索引。

要指定一个 GeoJSON 点,$near 操作符需要一个 2dsphere 索引,语法如下:

{
<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 的类型是否为 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

在此页面上