For AI agents: a documentation index is available at https://www.mongodb.com/docs/llms.txt — markdown versions of all pages are available by appending .md to any URL path.
Docs Menu

GeoJSON Objects

MongoDB supports the GeoJSON object types listed on this page.

To specify GeoJSON data, use an embedded document with:

  • a field named type that specifies the GeoJSON object type, and

  • a field named coordinates that specifies the object's coordinates.

<field>: { type: <GeoJSON type> , coordinates: <coordinates> }

Important

If specifying latitude and longitude coordinates, list the longitude first, and then latitude.

  • Valid longitude values are between -180 and 180, both inclusive.

  • Valid latitude values are between -90 and 90, both inclusive.

MongoDB geospatial queries on GeoJSON objects calculate on a sphere; MongoDB uses the WGS84 reference system for geospatial queries on GeoJSON objects.

The following example specifies a GeoJSON Point:

{ type: "Point", coordinates: [ 40, 5 ] }

The following example specifies a GeoJSON LineString:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

Polygons consist of an array of GeoJSON LinearRing coordinate arrays. A LinearRing is a closed LineString with at least four coordinate pairs. The first and last coordinates must be identical.

Lines between two points on a curved surface, or geodesics, can differ from lines between the same points on a flat surface. Check coordinates carefully to avoid shared-edge errors, overlaps, or other intersections.

The following example specifies a GeoJSON Polygon with an exterior ring and no interior rings (or holes). The first and last coordinates must match in order to close the polygon:

{
type: "Polygon",
coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
}

For Polygons with a single ring, the ring cannot self-intersect.

For Polygons with multiple rings:

  • The first described ring must be the exterior ring.

  • The exterior ring cannot self-intersect.

  • Any interior ring must be entirely contained by the outer ring.

  • Interior rings cannot intersect or overlap each other. Interior rings cannot share an edge.

The following example represents a GeoJSON polygon with an interior ring:

{
type : "Polygon",
coordinates : [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ],
[ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]
]
}
Diagram of a Polygon with internal ring.

Requires 2dsphere Indexes.

GeoJSON MultiPoint embedded documents encode a list of points.

{
type: "MultiPoint",
coordinates: [
[ -73.9580, 40.8003 ],
[ -73.9498, 40.7968 ],
[ -73.9737, 40.7648 ],
[ -73.9814, 40.7681 ]
]
}

Requires 2dsphere Indexes.

The following example specifies a GeoJSON MultiLineString:

{
type: "MultiLineString",
coordinates: [
[ [ -73.96943, 40.78519 ], [ -73.96082, 40.78095 ] ],
[ [ -73.96415, 40.79229 ], [ -73.95544, 40.78854 ] ],
[ [ -73.97162, 40.78205 ], [ -73.96374, 40.77715 ] ],
[ [ -73.97880, 40.77247 ], [ -73.97036, 40.76811 ] ]
]
}

Requires 2dsphere Indexes.

The following example specifies a GeoJSON MultiPolygon:

{
type: "MultiPolygon",
coordinates: [
[ [ [ -73.958, 40.8003 ], [ -73.9498, 40.7968 ], [ -73.9737, 40.7648 ], [ -73.9814, 40.7681 ], [ -73.958, 40.8003 ] ] ],
[ [ [ -73.958, 40.8003 ], [ -73.9498, 40.7968 ], [ -73.9737, 40.7648 ], [ -73.958, 40.8003 ] ] ]
]
}

Requires 2dsphere Indexes.

The following example stores coordinates of GeoJSON type GeometryCollection:

{
type: "GeometryCollection",
geometries: [
{
type: "MultiPoint",
coordinates: [
[ -73.9580, 40.8003 ],
[ -73.9498, 40.7968 ],
[ -73.9737, 40.7648 ],
[ -73.9814, 40.7681 ]
]
},
{
type: "MultiLineString",
coordinates: [
[ [ -73.96943, 40.78519 ], [ -73.96082, 40.78095 ] ],
[ [ -73.96415, 40.79229 ], [ -73.95544, 40.78854 ] ],
[ [ -73.97162, 40.78205 ], [ -73.96374, 40.77715 ] ],
[ [ -73.97880, 40.77247 ], [ -73.97036, 40.76811 ] ]
]
}
]
}