$near
On this page本页内容
Definition定义
$near
-
Specifies a point for which a geospatial query returns the documents from nearest to farthest.指定geospatial
查询从最近到最远返回文档的点。The$near
operator can specify either a GeoJSON point or legacy coordinate point.$near
运算符可以指定GeoJSON点或传统坐标点。$near
requires a geospatial index:需要地理空间索引:2dsphere index if specifying a GeoJSON point.2dsphere
索引(如果指定GeoJSON点)。2d index if specifying a point using legacy coordinates.如果使用传统坐标指定点,则使用2d
索引。
To specify a GeoJSON point,要指定GeoJSON点,$near
operator requires a 2dsphere index and has the following syntax:$near
运算符需要2dsphere
索引,并具有以下语法:{
<location field>: {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ <longitude> , <latitude> ]
},
$maxDistance: <distance in meters>,
$minDistance: <distance in meters>
}
}
}ImportantIf specifying latitude and longitude coordinates, list the longitude first, and then latitude.如果指定纬度和经度坐标,请先列出经度,然后列出纬度。Valid longitude values are between有效的经度值介于-180
and180
, both inclusive.-180
和180
之间(包括-180
和180
)。Valid latitude values are between有效的纬度值介于-90
and90
, both inclusive.-90
和90
之间(包括-90
和90
)。
When specifying a GeoJSON point, you can use the optional指定GeoJSON点时,您可以使用可选的$minDistance
and$maxDistance
specifications to limit the$near
results by distance in meters:$minDistance
和$maxDistance
规范来按米的距离限制$near
结果:$minDistance
limits the results to those documents that are at least the specified distance from the center point.将结果限制为距离中心点至少指定距离的文档。$maxDistance
limits the results to those documents that are at most the specified distance from the center point.将结果限制为距离中心点最多指定距离的文档。
To specify a point using legacy coordinates,要使用传统坐标指定点,$near
requires a 2d index and has the following syntax:$near
需要2d
索引,并具有以下语法:{
$near: [ <x>, <y> ],
$maxDistance: <distance in radians>
}When specifying a legacy coordinate, you can use the optional指定传统坐标时,可以使用可选的$maxDistance
specification to limit the$near
results by distance in radians.$maxDistance
规范来按弧度的距离限制$near
结果。$maxDistance
limits the results to those documents that are at most the specified distance from the center point.将结果限制为距离中心点最多指定距离的文档。
Behavior行为
Special Indexes Restriction特殊索引限制
You cannot combine the 不能将需要特殊地理空间索引的$near
operator, which requires a special geospatial index, with a query operator or command that requires another special index. $near
运算符与需要其他特殊索引的查询运算符或命令组合使用。For example you cannot combine 例如,不能将$near
with the $text
query.$near
与$text
查询组合在一起。
Sharded Collections分片集合
Prior to MongoDB 4.0, 在MongoDB 4.0之前,分片集合不支持$near
queries are not supported for sharded collections. $near
查询。Instead, you can use the 相反,您可以使用$geoNear
aggregation stage or the geoNear
command.$geoNear
聚合阶段或geoNear
命令。
Sort Operation排序操作
The $near
operator sorts documents by distance.$near
运算符按距离对文档进行排序。
If you use the如果在查询中使用sort()
method in your query, MongoDB performs a second sort operation, re-ordering the matching documents.sort()
方法,MongoDB将执行第二次排序操作,重新排序匹配的文档。When querying large collections, this can negatively affect query performance.查询大型集合时,这可能会对查询性能产生负面影响。If the order of the documents is not important to you, consider using the如果文档的顺序对您来说并不重要,请考虑使用$geoWithin
operator instead, as it returns unsorted results.$geoWithin
运算符,因为它会返回未排序的结果。$near
is a Match Execution operator and is not permitted in aggregation pipelines.是Match Execution运算符,不允许在聚合管道中使用。
See also: 另请参阅:
Examples实例
Query on GeoJSON DataGeoJSON数据查询
If specifying latitude and longitude coordinates, list the longitude first, and then latitude.如果指定纬度和经度坐标,请先列出经度,然后列出纬度。
Valid longitude values are between有效的经度值介于-180
and180
, both inclusive.-180
和180
之间(包括-180
和180
)。Valid latitude values are between有效的纬度值介于-90
and90
, both inclusive.-90
和90
之间(包括-90
和90
)。
Consider a collection 考虑一个具有places
that has a 2dsphere
index.2dsphere
索引的集合places
。
The following example returns documents that are at least 以下示例返回距离指定GeoJSON点至少1000
meters from and at most 5000
meters from the specified GeoJSON point, sorted from nearest to farthest:1000
米、最多5000
米的文档,按从最近到最远排序:
db.places.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)
Query on Legacy Coordinates查询旧坐标
If specifying latitude and longitude coordinates, list the longitude first, and then latitude.如果指定纬度和经度坐标,请先列出经度,然后列出纬度。
Valid longitude values are between有效的经度值介于-180
and180
, both inclusive.-180
和180
之间(包括-180
和180
)。Valid latitude values are between有效的纬度值介于-90
and90
, both inclusive.-90
和90
之间(包括-90
和90
)。
Consider a collection 考虑一个具有legacy2d
that has a 2d
index.2d
索引的集合legacy2d
。
The following example returns documents that are at most 以下示例从指定的旧坐标对返回最多0.10
radians from the specified legacy coordinate pair, sorted from nearest to farthest:0.10
弧度的文档,按从最近到最远排序:
db.legacy2d.find(
{ location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)