$geoNear (aggregation)

在本页面

Definition

$geoNear阶段具有以下原型形式:

{ $geoNear: { <geoNear options> } }

$geoNear运算符接受包含以下$geoNear选项的document。以与已处理文档的坐标系相同的单位指定所有距离:

Field Type Description
spherical boolean 如果使用2dsphere索引,则为必需。确定 MongoDB 如何计算距离。默认值为false


如果true,则如果指定的(near)点是 GeoJSON 点,则 MongoDB 将使用球形几何来计算距离,如果指定的(near)点是旧式坐标对,则 MongoDB 将使用弧度来计算距离。
如果为false,则 MongoDB 使用 2d 平面几何来计算点之间的距离。
如果使用2dsphere索引,则spherical必须是true
| limit |数字|可选。返回的最大文件数。默认值为100。另请参见num选项。
| num |数字|可选。 num选项提供的功能与limit选项相同。两者都定义了要返回的最大文档数。如果同时包含两个选项,则num值将覆盖limit值。
| maxDistance |数字|可选。 可以距文件中心点的最大距离。 MongoDB 将结果限制为距中心点指定距离内的那些文档。
如果指定的点是GeoJSON,则以米为单位,如果指定的点是传统坐标对,则以弧度为单位。
| query |文档|可选。将结果限制为与查询匹配的文档。查询语法是常用的 MongoDB 读取操作查询语法。
您不能在$geoNear阶段的query字段中指定$near谓词。
| distanceMultiplier |数字|可选。将查询返回的所有距离相乘的因子。例如,使用distanceMultiplier通过乘以地球半径将球形查询返回的弧度转换为公里。
| uniqueDocs |布尔值|可选。如果此值为true,则即使文档的多个位置字段与查询匹配,查询也会返回一次匹配的文档。
从 2.6 版开始不推荐使用:地理空间查询不再返回重复的结果。 $uniqueDocs运算符对结果没有影响。|
| near | GeoJSON 点或传统坐标对 |要查找最近文档的点。
如果使用2dsphere索引,则可以将点指定为 GeoJSON 点或旧版坐标对。
如果使用2d索引,则将该点指定为旧坐标对。
| distanceField | string |包含计算出的距离的输出字段。要在嵌入式文档中指定字段,请使用dot notation
| includeLocs | string |可选。这指定了标识用于计算距离的位置的输出字段。当位置字段包含多个位置时,此选项很有用。要在嵌入式文档中指定字段,请使用dot notation
| minDistance |数字|可选。距文档中心点的最小距离。 MongoDB 将结果限制为距中心点超出指定距离的那些文档。
为 GeoJSON 数据指定距离(以米为单位),为旧坐标对指定距离(以弧度为单位)。
版本 3.2 中的新功能。

Behavior

使用$geoNear时,请考虑:

通常,$geoNear的选项与geoNear命令相似,但以下情况除外:

Example

考虑具有2dsphere索引的集合places。以下汇总最多找到5个唯一文档,这些文档的位置距中心[ -73.99279 , 40.719296 ]最多 2 米,并且type等于public

db.places.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
        distanceField: "dist.calculated",
        maxDistance: 2,
        query: { type: "public" },
        includeLocs: "dist.location",
        num: 5,
        spherical: true
     }
   }
])

聚合返回以下内容:

{
   "_id" : 8,
   "name" : "Sara D. Roosevelt Park",
   "type" : "public",
   "location" : {
      "type" : "Point",
      "coordinates" : [ -73.9928, 40.7193 ]
   },
   "dist" : {
      "calculated" : 0.9539931676365992,
      "location" : {
         "type" : "Point",
         "coordinates" : [ -73.9928, 40.7193 ]
      }
   }
}

匹配的文档包含两个新字段:

Minimum Distance

3.2 版中的新功能。

下面的示例使用选项minDistance来指定距文档中心点的最小距离。 MongoDB 将结果限制为距中心点超出指定距离的那些文档。

db.places.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
        distanceField: "dist.calculated",
        minDistance: 2,
        query: { type: "public" },
        includeLocs: "dist.location",
        num: 5,
        spherical: true
     }
   }
])
首页