Visão geral
Um índice do 2dsphere suporta queries que calculam geometrias em uma esfera semelhante à Terra. O índice 2dsphere suporta todas as queries geoespaciais MongoDB : queries para inclusão, interseção e proximidade. Para mais informações sobre queries geoespaciais, consulte queries geoespaciais.
O índice 2dsphere suporta dados armazenados como objetosGeoJSON  e legacy coordinate pairs (consulte também 2dsphere Restrições de campos indexados). Para legacy coordinate pairs, o índice converte os dados para GeoJSON Point.
Versões
| 2dsphereVersão do Índice | Descrição | 
|---|---|
| Versão 3 | O MongoDB 3.2 introduz uma versão 3 de índices do  | 
| Versão 2 | O MongoDB 2.6 introduz uma versão 2 de índices do  | 
Para substituir a versão padrão e especificar uma versão diferente, inclua a opção { "2dsphereIndexVersion": <version> } ao criar o índice.
sparse Propriedade
Os índices 2dsphere versão 2 e posteriores são sempre escassos e ignoram a opção esparsa . Se um documento não tiver um campo de índice 2dsphere (ou o campo for null ou uma array vazia), o MongoDB não adicionará uma entrada para o documento ao índice. Para inserções, o MongoDB insere o documento, mas não adiciona ao índice 2dsphere .
Para um índice composto que inclui uma chave de índice 2dsphere junto com chaves de outros tipos, somente o campo de índice 2dsphere determina se o índice faz referência a um documento.
Versões anteriores do MongoDB suportam apenas índices 2dsphere (Version 1) . Os índices 2dsphere (Version 1) não são escassos por padrão e rejeitarão documentos com null campos de localização.
Objetos GeoJSON adicionais
A versão 2 e os índices 2dsphere posteriores incluem suporte para objetos GeoJSON adicionais: MultiPoint, MultiLineString, MultiPolygon e GeometryCollection. Para detalhes sobre todos os objetos GeoJSON suportados, consulte Objetos GeoJSON.
Considerações
geoNear e $geoNear restrições
Você pode especificar uma opção key para o estágio de pipeline $geoNear para indicar o caminho do campo indexado a ser usado. Isso permite que o estágio $geoNear seja usado em uma collection que tenha vários índices 2dsphere e/ou vários índices 2d :
- Se a sua collection tiver vários índices - 2dspheree/ou vários índices 2d , você deverá usar a opção- keypara especificar o caminho do campo a ser usado.
- Se você não especificar o - key, não poderá ter vários índices- 2dspheree/ou vários índices 2d , pois sem o- key, a seleção de índices entre vários índices- 2dou índices- 2dsphereé ambígua.
Observação
Se você não especificar key e tiver no máximo apenas um índice 2dsphere e/ou apenas um índice 2dsphere , o MongoDB procurará primeiro um índice 2d para usar. Se um índice 2d não existir, o MongoDB procurará um índice 2dsphere para usar.
Restrições da chave de fragmento
Não é possível usar um índice 2dsphere como chave de shard ao fragmentar uma coleção. No entanto, você pode criar um índice geoespacial em uma coleção fragmentada utilizando um campo diferente como a chave fragmentada.
2dsphere Restrições de campos indexados
Campos com índices 2dsphere devem conter dados geométricos na forma de pares de coordenadas ou dados GeoJSON . Se você tentar inserir um documento com dados não geométricos em um campo indexado do 2dsphere ou construir um índice do 2dsphere em uma collection onde o campo indexado tem dados não geométricos, a operação falhará.
Criar um 2dsphere índice
Para criar um índice do 2dsphere, utilize o método db.collection.createIndex() e especifique a string literal "2dsphere" como o tipo de índice:
db.collection.createIndex( { <location field> : "2dsphere" } ) 
onde o <location field> é um campo cujo valor é um objeto GeoJSON ou um par de coordenadas legado.
Observação
Se você tentar criar um índice em um campo que contém uma matriz de pontos dogeoJSON, a construção do índice falhará e retornará o seguinte erro:
MongoServerError: Index build failed
Ao contrário de um índice composto 2d que pode referenciar um campo de localização e um outro campo, um índice composto 2dsphere pode referenciar vários campos de localização e não localização.
Para os seguintes exemplos, considere uma collection places com documento que armazenam dados de localização como ponto GeoJSON em um campo loc:
db.places.insertMany( [    {       loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },       name: "Central Park",       category : "Parks"    },    {       loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },       name: "La Guardia Airport",       category : "Airport"    } ] ) 
Criar um 2dsphere índice
A seguinte operação cria um índice 2dsphere no campo de localização loc :
db.places.createIndex( { loc : "2dsphere" } ) 
Criar um índice composto com 2dsphere chave de índice
Um índice composto pode incluir uma chave de índice 2dsphere em combinação com chaves de índice não geoespaciais. Por exemplo, a seguinte operação cria um índice composto onde a primeira chave loc é uma chave de índice 2dsphere e as chaves restantes category e names são chaves de índice não geoespaciais, especificamente descendentes (-1) e teclas ascendentes (1), respectivamente.
db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } ) 
Ao contrário do índice 2d , um índice composto 2dsphere não exige que o campo de localização seja o primeiro campo indexado. Por exemplo:
db.places.createIndex( { category : 1 , loc : "2dsphere" } )