Docs 菜单

Docs 主页开发应用程序MongoDB Manual

$near

在此页面上

  • 定义
  • 行为
  • 举例
$near

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

$near 需要地理空间索引:

要指定GeoJSON点, $near操作符需要2 dsphere索引,并具有以下语法:

{
<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需要2 d索引,语法如下:

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

指定传统坐标时,可以使用 可选$maxDistance 的 规范,通过以$near 弧度为单位 的距离来限制 结果。$maxDistance 将结果限制为与中心点相距不 超过 指定距离的文档。

不能将需要特殊$near 地理空间索引 的 操作符与需要其他特殊索引的查询操作符或命令组合使用。例如,您不能将$near$text 查询结合使用。

从 MongoDB 4开始。分片集合支持0 、 $near查询。

在早期 MongoDB 版本中,分片集合不支持$near查询;相反,对于分片集群,您必须使用$geoNear聚合阶段或geoNear命令(在 MongoDB 4 . 0及更早版本中可用)。

$near操作符按距离对文档进行排序。

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

  • 如果文档的顺序对您来说并不重要,可以考虑改用 $geoWithin 操作符,因为该操作符会返回未排序的结果。

  • $near 是一种匹配执行操作符,不允许在聚合管道中使用。

重要

如果指定纬度和经度坐标,则先列出经度,然后列出纬度

  • 有效经度值介于 -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

在此页面上