5.5 $nearSphere

O operador $nearSphere do MongoDB especifica o ponto para o qual a consulta geoespacial retorna os documentos do mais próximo ao mais distante. As distâncias são calculadas usando geometria esférica.

> // Exibir os títulos das páginas distantes menos
> // de 200 metros do centro da Praça da República.
> // (6371 km é o raio médio da terra)
> // (coordenadas em Longitude, Latitude)
> db.pages.find(
...     { coordinates :
...         { $nearSphere  :
...             [ -43.1885, -22.9066 ],
...             $maxDistance: 0.2/6371 }
...      },
...      {title: 1, _id: 0}
... );
{ "title" : "Campo de Santana" }
{ "title" : "Jardim da Praça da República" }
{ "title" : "Praça do Curro" }
{ "title" : "Palacete da Praça da Aclamação" }
{ "title" : "Praça da República" }
{ "title" : "As fontes em forma de Stella" }
{ "title" : "Casamento da Princesa Dona Maria Teresa" }
{ "title" : "Aclamação de Dom Pedro I Imperador do Brasil no Campo de Santa Anna no Rio de Janeiro" }
{ "title" : "Parques e Áreas Verdes" }
{ "title" : "A Aclamação" }
{ "title" : "Monumentos da Cidade do Rio de Janeiro" }
{ "title" : "Rua Detrás do Hospício" }
{ "title" : "Rua Senhor dos Passos" }
{ "title" : "Rua da Alfândega" }
{ "title" : "Rua dos Ciganos" }
>

Veja agora a mesma consulta executada substituindo o campo coordinates pelo campo geometry:

> db.pages.find(
...     { geometry :
...         { $nearSphere  :
...             [ -43.1885, -22.9066 ],
...             $maxDistance: 0.2/6371 }
...      },
...      {title: 1, _id: 0}
... );
{ "title" : "Campo de Santana" }
{ "title" : "Jardim da Praça da República" }
{ "title" : "As fontes em forma de Stella" }
{ "title" : "Praça do Curro" }
{ "title" : "Praça da República" }
{ "title" : "Palacete da Praça da Aclamação" }
{ "title" : "Parques e Áreas Verdes" }
{ "title" : "Casamento da Princesa Dona Maria Teresa" }
{ "title" : "A Aclamação" }
{ "title" : "Aclamação de Dom Pedro I Imperador do Brasil no Campo de Santa Anna no Rio de Janeiro" }
{ "title" : "Monumentos da Cidade do Rio de Janeiro" }
{ "title" : "Rua Detrás do Hospício" }
{ "title" : "Rua Senhor dos Passos" }
{ "title" : "Rua da Alfândega" }
{ "title" : "Rua dos Ciganos" }
>

A segunda consulta retornou os mesmos títulos da consulta anterior, só mudando a ordem dos documentos que têm a mesma coordenada.

5. Consultas geoespaciais