On this page
geoNear
On this page
Definition
geoNear-
Returns documents in order of proximity to a specified point, from the nearest to farthest.
geoNearrequires a geospatial index.The
geoNearcommand accepts a document that contains the following fields. Specify all distances in the same units as the document coordinate system:Field Type Description geoNearstring The collection to query. nearGeoJSON point or legacy coordinate pair The point for which to find the closest documents.
If using a 2dsphere index, you can specify the point as either a GeoJSON point or legacy coordinate pair.
If using a 2d index, specify the point as a legacy coordinate pair.
sphericalboolean Required if using a
2dsphereindex. Determines how MongoDB calculates the distance. The default value isfalse.If
true, then MongoDB uses spherical geometry to calculate distances in meters if the specified (near) point is a GeoJSON point and in radians if the specified (near) point is a legacy coordinate pair.If
false, then MongoDB uses 2d planar geometry to calculate distance between points.If using a 2dsphere index,
sphericalmust betrue.limitnumber Optional. The maximum number of documents to return. The default value is 100. See also thenumoption.numnumber Optional. The numoption provides the same function as thelimitoption. Both define the maximum number of documents to return. If both options are included, thenumvalue overrides thelimitvalue.minDistancenumber Optional. The minimum distance from the center point that the documents must be. MongoDB filters the results to those documents that are at least the specified distance from the center point.
Only available for use with 2dsphere index.
Specify the distance in meters if the specified point is GeoJSON and in radians if the specified point is legacy coordinate pairs.
New in version 2.6.
maxDistancenumber Optional. The maximum distance from the center point that the documents can be. MongoDB limits the results to those documents that fall within the specified distance from the center point.
Specify the distance in meters if the specified point is GeoJSON and in radians if the specified point is legacy coordinate pairs.
querydocument Optional. Limits the results to the documents that match the query. The query syntax is the usual MongoDB read operation query syntax.
You cannot specify a
$nearpredicate in thequeryfield of thegeoNearcommand.distanceMultipliernumber Optional. The factor to multiply all distances returned by the query. For example, use the distanceMultiplierto convert radians, as returned by a spherical query, to kilometers by multiplying by the radius of the Earth.includeLocsboolean Optional. If this is true, the query returns the location of the matching documents in the results. The default isfalse. This option is useful when a location field contains multiple locations. To specify a field within an embedded document, use dot notation.uniqueDocsboolean Optional. If this value is
true, the query returns a matching document once, even if more than one of the document’s location fields match the query.Deprecated since version 2.6: Geospatial queries no longer return duplicate results. The
$uniqueDocsoperator has no impact on results.readConcerndocument Optional. Specifies the read concern.
The readConcern option has the following syntax:
Changed in version 3.6.
readConcern: { level: <value> }Possible read concern levels are:
"local". This is the default read concern level."available". This is the default for reads against secondaries when Read Operations and Causally Consistent Sessions and “level” are unspecified. The query returns the instance’s most recent data."majority". Available for replica sets that use WiredTiger storage engine."linearizable". Available for read operations on theprimaryonly.
For more formation on the read concern levels, see Read Concern Levels.
For
"local"(default) or"majority"read concern level, you can specify theafterClusterTimeoption to have the read operation return data that meets the level requirement and the specified after cluster time requirement. For more information, see Read Operations and Causally Consistent Sessions.
Considerations
geoNear requires a geospatial index.
However, the geoNear command requires that a collection have at most only one 2dsphere and/or only one 2d index .
Views do not support geoNear operations (i.e. geoNear command and $geoNear pipeline stage)
You cannot specify a $near predicate in the query field of the geoNear command.
Command Syntax
2dsphere Index
If using a 2dsphere index, you can specify either a GeoJSON point or a legacy coordinate pair for the near value.
You must include spherical: true in the syntax.
With spherical: true, if you specify a GeoJSON point, MongoDB uses meters as the unit of measurement:
db.runCommand( {
geoNear: <collection> ,
near: { type: "Point" , coordinates: [ <coordinates> ] } ,
spherical: true,
...
} )
With spherical: true, if you specify a legacy coordinate pair, MongoDB uses radians as the unit of measurement:
db.runCommand( {
geoNear: <collection> ,
near: [ <coordinates> ],
spherical: true,
...
} )
2d Index
To query a 2d index, use the following syntax:
db.runCommand( {
geoNear: <collection>,
near : [ <coordinates> ],
...
} )
If you specify spherical: true, MongoDB uses spherical geometry to calculate distances in radians. Otherwise, MongoDB uses planar geometry to calculate distances between points.
Behavior
geoNear sorts documents by distance. If you also include a sort() for the query, sort() re-orders the matching documents, effectively overriding the sort operation already performed by geoNear. When using sort() with geospatial queries, consider using $geoWithin operator, which does not sort documents, instead of geoNear.
Because geoNear orders the documents from nearest to farthest, the minDistance field effectively skips over the first n documents where n is determined by the distance requirement.
The geoNear command provides an alternative to the $near operator. In addition to the functionality of $near, geoNear returns additional diagnostic information.
In a sharded cluster, the geoNear command may return orphaned documents. To avoid this, consider using the $geoNear aggregation stage as an alternative.
Examples
The following examples run the geoNear command on the collection places that has a 2dsphere index.
Specify a Query Condition
The following geoNear command queries for documents whose category equals "public" and returns the matching documents in order of nearest to farthest to the specified point:
db.runCommand(
{
geoNear: "places",
near: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
spherical: true,
query: { category: "public" }
}
)
The operation returns the following output, the documents in the results from nearest to farthest:
{
"results" : [
{
"dis" : 0,
"obj" : {
"_id" : 2,
"location" : { "type" : "Point", "coordinates" : [ -73.9667, 40.78 ] },
"name" : "Central Park",
"category" : "public"
}
},
{
"dis" : 3245.988787957091,
"obj" : {
"_id" : 3,
"location" : { "type" : "Point", "coordinates" : [ -73.9836, 40.7538 ] },
"name" : "Bryant Park",
"category" : "public"
}
},
{
"dis" : 7106.506152782733,
"obj" : {
"_id" : 4,
"location" : { "type" : "Point", "coordinates" : [ -73.9928