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
}
}
])