Nem todas as formas de consulta exigem a criação de um índice geoespacial, mas, mesmo quando o índice não é obrigatório, pode melhorar o desempenho da consulta.
O MongoDB trabalha com dados geoespaciais sob a forma de pares de coordenadas, que chama de legado, e objetos GeoJSON, onde o campo type especifica o tipo do objeto e o campo coordinates especifica as coordenadas do objeto.
Na coleção pages o campo coordinates contém pares de coordenadas, enquanto o campo geometry contém objetos GeoJSON. Serão, então, criados dois índices geoespaciais, 2d para o campo coordinates e 2dsphere para o campo coordinates, conforme mostrado abaixo:
> db.pages.createIndex( { coordinates: "2d" } );
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
> db.pages.createIndex( { geometry: "2dsphere" } );
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"numIndexesAfter" : 4,
"ok" : 1
}
>
Para exibir os índices existentes é utilizado o comando:
> db.pages.getIndexes();
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "reficio.pages"
},
{
"v" : 2,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "title_text_content_text_slug_text",
"ns" : "reficio.pages",
"weights" : {
"content" : 1,
"slug" : 1,
"title" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
},
{
"v" : 2,
"key" : {
"coordinates" : "2d"
},
"name" : "coordinates_2d",
"ns" : "reficio.pages"
},
{
"v" : 2,
"key" : {
"geometry" : "2dsphere"
},
"name" : "geometry_2dsphere",
"ns" : "reficio.pages",
"2dsphereIndexVersion" : 3
}
]
>