Os índices 2d e 2dsphere são índices geoespaciais. Os índices geoespaciais têm estas restrições:
Opção de agrupamento
2índices d não oferecem suporte à opção de agrupamento, apenas à comparação binária. A comparação binária compara o valor numérico Unicode de cada caractere em cada string e não leva em conta letras maiúsculas e minúsculas ou acentos.
Para criar um índice 2d em uma collection que tem um agrupamento não simples, você deve especificar explicitamente { collation: { locale: "simple"
} }
ao criar o índice.
Por exemplo, pense em uma coleção chamada collationTest
com um agrupamento de { locale: "en" }
:
db.createCollection( "collationTest", { collation: { locale: "en" } } )
Para criar um índice 2D na coleção collationTest
, você deve especificar { collation: { locale: "simple" } }
. Este comando cria um índice 2D no campo loc
:
db.collationTest.createIndex( { loc: "2d" }, { collation: { locale: "simple" } } )
Queries cobertas
Os índices geoespaciais não podem cobrir uma query.
Chave de fragmento
Não é possível usar um índice geoespacial como uma chave fragmentada. No entanto, você pode criar um índice geoespacial em uma coleção fragmentada usando um campo diferente como a chave fragmentada.
Vários índices geoespaciais com $geoNear
Se sua coleção tiver vários índices geoespaciais, ao executar o estágio de pipeline $geoNear
, você deverá especificar a opção $geoNear
key
. A opção key
especifica qual índice usar para permitir a query.
Tipos de dados suportados
Um campo indexado com um índice 2dsphere deve conter dados de geometria. Os dados de geometria podem ser:
Você não pode:
Insira um documento com dados não geométricos em um campo indexado com um índice dsphere 2 .
Crie um índice de esfera 2em um campo que contém dados não geométricos.
Número de chaves de índice
Quando você cria um índice dsphere2, o mongod
mapeia formas GeoJSON para uma representação interna. A representação interna resultante pode ser uma grande array de valores.
A configuração indexMaxNumGeneratedKeysPerDocument
limita o número máximo de chaves geradas para um único documento para evitar erros de falta de memória. Se uma operação exigir mais chaves do que o parâmetro indexMaxNumGeneratedKeysPerDocument
especifica, a operação falhará.
Por padrão, o servidor permite até 100,000
chaves de índice por documento. Para permitir mais chaves de índice, aumente o valor indexMaxNumGeneratedKeysPerDocument
.
Correspondências exatas em uma superfície plana
Um índice 2d não pode melhorar o desempenho de correspondências exatas em um par de coordenadas.
Por exemplo, considere uma collection contacts
com estes documentos:
db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] )
Um índice 2d no campo address
não melhora o desempenho da seguinte query:
db.contacts.find( { address: [ 55.5, 42.3 ] } )
Para melhorar o desempenho dessa consulta, crie um índice ascendente ou descendente no campo address
:
db.contacts.createIndex( { address: 1 } )