$near

在本页面

Definition

$near需要地理空间索引:

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

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

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

指定GeoJSON点时,可以使用* optional * $minDistance$maxDistance规范来限制$near结果,以为单位:

2.6 版的新功能。

要使用传统坐标指定点,$near要求2d索引,语法如下:

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

指定旧版坐标时,您可以使用* optional * $maxDistance规范,以* radians *中的距离限制$near结果。 $maxDistance将结果限制为“最多”离中心点指定距离的那些文档。

Behavior

特殊索引限制

您不能将需要特殊geospatial index$near运算符与需要另一个特殊索引的查询运算符或命令结合使用。例如,您不能将$near$text查询结合使用。

分片集合限制

对于分片集合,不支持使用$near查询。您可以改用geoNear命令或$geoNear聚合阶段。

Sort Operation

$near按距离对文档进行排序。如果还为查询包括sort(),则sort()重新排序匹配的文档,从而有效地覆盖$near已经执行的排序操作。将sort()与地理空间查询一起使用时,请考虑使用$geoWithin运算符,该运算符不对文档进行排序,而不是$near

Examples

查询 GeoJSON 数据

Important

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

  • 有效的经度值在-180180之间(包括两端值)。

  • 有效的纬度值在-9090之间(包括两端值)。

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

以下示例返回距指定的 GeoJSON 点至少1000米,最多5000米的文档,其排序方式为从最近到最远:

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

查询旧版坐标

Important

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

  • 有效的经度值在-180180之间(包括两端值)。

  • 有效的纬度值在-9090之间(包括两端值)。

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

下面的示例返回从指定的旧式坐标对到最大0.10弧度的文档,从最近到最远排序:

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