对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

$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>
}
}
}

重要

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

  • 有效经度值介于 -180 和 180 之间,两者均包括在内。

  • 有效纬度值介于 -90 和 90 之间,两者均包括在内。

指定 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。任何其他输入类型都会返回错误。

从MongoDB 9.0 开始, MongoDB会跟踪 $near 用于缓冲结果和删除重复记录的内存。如果查询超过该阶段的 100 MB 内存限制, MongoDB将结束查询并返回错误。

只有匹配大量文档的查询才会达到此限制。要减少查询所需的内存,请指定 maxDistance 以限制搜索区域。此内存计入每次操作内存限制。要学习;了解更多信息,请参阅每次操作内存限制。

重要

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

  • 有效经度值介于 -180 和 180 之间,两者均包括在内。

  • 有效纬度值介于 -90 和 90 之间,两者均包括在内。

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

以下示例返回距指定 GeoJSON 点至少 1000 米、至多 5000 米的文档(按从最近到最远排序):

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

重要

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

  • 有效经度值介于 -180 和 180 之间,两者均包括在内。

  • 有效纬度值介于 -90 和 90 之间,两者均包括在内。

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

以下示例将返回距指定传统坐标对最多 0.10 弧度的文档(按从最近到最远的顺序排序):

db.legacy2d.find(
{ location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)
给本页内容打分

在此页面上