5.1 Índices

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

5. Consultas geoespaciais