This version of the documentation is archived and no longer supported.


On this page


The geoSearch command provides an interface to MongoDB’s haystack index functionality. These indexes are useful for returning results based on location coordinates after collecting results based on some other query (i.e. a “haystack.”)

The geoSearch command accepts a document that contains the following fields.

Field Type Description
geoSearch string The collection to query.
search document Query to filter documents.
near array Coordinates of a point.
maxDistance number Optional. Maximum distance from the specified point.
limit number Optional. Maximum number of documents to return.
readConcern document

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:

For more formation on the read concern levels, see Read Concern Levels.

For "local" (default) or "majority" read concern level, you can specify the afterClusterTime option 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 afterClusterTime.

For more information on the read concern levels, see Read Concern Levels.



Unless specified otherwise, the geoSearch command limits results to 50 documents.

Sharded Clusters

geoSearch is not supported for sharded clusters.


geoSearch supports multi-document transactions.


In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transaction should not be a replacement for effective schema design. For many scenarios, the denormalized data model (embedded documents and arrays) will continue to be optimal for your data and use cases. That is, for many scenarios, modeling your data appropriately will minimize the need for multi-document transactions. For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.


Consider the following example:

   geoSearch : "places",
   near: [ -73.9667, 40.78 ],
   maxDistance : 6,
   search : { type : "restaurant" },
   limit : 30

The above command returns all documents with a type of restaurant having a maximum distance of 6 units from the coordinates [ -73.9667, 40.78 ] in the collection places up to a maximum of 30 results.

Override Default Read Concern

To override the default read concern level of "local", use the readConcern option.

The following operation on a replica set specifies a Read Concern of "majority" to read the most recent copy of the data confirmed as having been written to a majority of the nodes.


      geoSearch: "places",
      near: [ -73.9667, 40.78 ],
      search : { type : "restaurant" },
      readConcern: { level: "majority" }

To ensure that a single thread can read its own writes, use "majority" read concern and "majority" write concern against the primary of the replica set.