On this page
$geoNear (aggregation)
在本页面
Definition
$geoNear
- 以距指定点最近到最远的 Sequences 输出文档。
$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用作管道的第一阶段。
您必须包含
distanceField
选项。distanceField
选项指定将包含计算出的距离的字段。$geoNear要求一个集合最多仅一个2d index和/或仅一个2dsphere index。
您无需指定文档中的哪个字段包含坐标对或点。由于$geoNear要求集合具有单个地理空间索引,因此$geoNear隐式使用索引字段。
如果使用2dsphere index,则必须指定
spherical: true
。
通常,$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 ]
}
}
}
匹配的文档包含两个新字段:
dist.calculated
包含计算出的距离的字段,以及dist.location
字段,其中包含计算中使用的位置。
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
}
}
])