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