Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

2dsphere Índices

Nesta página

  • Visão geral
  • Versões
  • Considerações
  • Crie um índice 2dsphere

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 objetos GeoJSON e pares de coordenadas legados (consulte também 2dsphere Restrições de campos indexados). Para pares de coordenadas legados, o índice converte os dados para GeoJSON Point.

2dsphere Versão do Índice
Descrição
Versão 3
O MongoDB 3.2 introduz uma versão 3 de índices do 2dsphere . A versão 3 é a versão padrão dos índices 2dsphere criados no MongoDB 3.2 e versões posteriores.
Versão 2
O MongoDB 2.6 introduz uma versão 2 de índices do 2dsphere . A versão 2 é a versão padrão dos índices 2dsphere criados nas séries MongoDB 2.6 e 3.0.

Para substituir a versão padrão e especificar uma versão diferente, inclua a opção { "2dsphereIndexVersion": <version> } ao criar o índice.

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.

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.

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 2dsphere e/ou vários índices 2d , você deverá usar a opção key para especificar o caminho do campo a ser usado.

  • Se você não especificar o key, não poderá ter vários índices 2dsphere e/ou vários índices 2d , pois sem o key, a seleção de índices entre vários índices 2d ou í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.

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.

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á.

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"
}
] )

A seguinte operação cria um índice 2dsphere no campo de localização loc :

db.places.createIndex( { loc : "2dsphere" } )

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" } )

Voltar

Restrições de índice curinga

Próximo

Query um