$near
定义
$near指定一个点,对于该点,地理空间查询按从近到远的顺序返回文档。地理空间查询返回从最近到最远的文档。运算符
$near可以指定一个GeoJSON点或旧坐标点。$near需要一个地理空间索引要指定一个GeoJSON点,运算符
{ <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。任何其他输入类型都会返回错误。
示例
查询 GeoJSON 数据
重要
如果指定经纬度坐标,请先列出经度,然后是纬度。
有效的经度值介于
-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 } } )