Docs Menu
Docs Home
/
MongoDB Manual
/ / /

geoSearch

On this page

  • Behavior
  • Examples
geoSearch

Important

Deprecation

MongoDB 4.4 deprecates the geoHaystack index and the geoSearch command. Use a 2d index with $geoNear or $geoWithin instead.

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.

Starting in MongoDB 3.6, the readConcern option has the following syntax: readConcern: { level: <value> }

Possible read concern levels are:

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

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

comment
any

Optional. A user-provided comment to attach to this command. Once set, this comment appears alongside records of this command in the following locations:

A comment can be any valid BSON type (string, integer, object, array, etc).

New in version 4.4.

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

geoSearch is not supported for sharded clusters.

geoSearch can be used inside distributed transactions.

Important

In most cases, a distributed transaction incurs a greater performance cost over single document writes, and the availability of distributed transactions 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 distributed transactions.

For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.

Consider the following example:

db.runCommand({
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.

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.

Note

  • To use read concern level of "majority", replica sets must use WiredTiger storage engine.

    You can disable read concern "majority" for a deployment with a three-member primary-secondary-arbiter (PSA) architecture; however, this has implications for change streams (in MongoDB 4.0 and earlier only) and transactions on sharded clusters. For more information, see Disable Read Concern Majority.

  • Regardless of the read concern level, the most recent data on a node may not reflect the most recent version of the data in the system.

db.runCommand(
{
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.

Back

Geospatial Commands

On this page