Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Pesquisar geoespacialmente

Você pode executar query de dados baseado em localização geográfica utilizando operadores de consulta geoespacial. Você pode formatar queries geoespaciais utilizando um dos seguintes sistemas de coordenadas:

Esta seção contém exemplos de queries geoespaciais utilizando diferentes operadores de consulta que você pode executar no seu conjunto de dados de amostra do Atlas.

For geospatial queries using longitude and latitude coordinates on an Earth-like sphere, use the GeoJSON query format. While GeoJSON has multiple types, all GeoJSON data types use some form of the following structure:

<field> : {
type: <GeoJSON type>,
coordinates: [
[longitude_1, latitude_1],
...
[longitude_n, latitude_n]
]
}

The object type determines the number of coordinates. For instance, a Point requires only one coordinate: a longitude and a latitude. A Line uses two coordinates: a longitude and a latitude for each end. A Polygon consists of a list of coordinates in which the first and last coordinate are the same, effectively closing the polygon. To learn more about the GeoJSON shapes you can use in MongoDB, consult the GeoJSON manual entry.

Para habilitar a consulta de dados GeoJSON, você deve adicionar o campo em um índice do 2dsphere. O seguinte trecho cria um índice no campo location.geo na coleção theaters utilizando o método createIndex():

await db.theaters.createIndex({location.geo: "2dsphere"});

Você também pode expressar queries geoespaciais utilizando coordenadas do x e y em um plano Euclidiano bidimensional. Até MongoDB, este era o único formato compatível com queries geoespaciais, e agora são referidos como "pares de coordenadas legadas".

Os pares de coordenadas legadas utilizam a seguinte estrutura:

<field> : [ x, y ]

O campo contém uma array de dois valores em que o primeiro representa o valor do eixo x e o segundo representa o valor do eixo y.

Para habilitar a consulta utilizando pares de coordenadas legadas, crie um índice 2d no campo na coleção. O seguinte trecho cria um índice no campo coordinates na coleção shipwrecks utilizando o método createIndex():

await db.shipwrecks.createIndex({coordinates: "2d"});

See the MongoDB Server manual page on legacy coordinate pairs for more information.

Observação

Spherical (2dsphere) and flat (2d) indexes support some, but not all, of the same query operators. For a full list of operators and their index compatibility, consult the manual entry for geospatial queries.

Os exemplos seguintes utilizam o conjunto de dados de amostra do MongoDB Atlas . Você pode aprender como definir seu próprio Atlas cluster de camada grátis e como carregar o conjunto de dados de exemplo em nosso guia de introdução.

Os exemplos utilizam a coleção do theaters no banco de dados do sample_mflix a partir do conjunto de dados de amostra. A coleção theaters contém um índice 2dsphere no campo location.geo.

O operador $near aceita um conjunto de coordenadas de longitude-latitude e retorna documentos ordenados do mais próximo para o mais distante. Para limitar os resultados a uma distância máxima em metros, utilize a opção $maxDistance. Para obter uma lista completa de opções, consulte a documentação de referência do $near. O exemplo a seguir consulta os cinemas em um raio de 10,000 metros de [ -73.9667, 40.78 ].

// Find theaters within a certain proximity
async function proximity(theaters) {
// Define the query to find theaters near a specific location
const query = {
"location.geo": {
$near: {
$geometry: { type: "Point", coordinates: [-73.9667, 40.78] },
$maxDistance: 10000,
},
},
};
// Find documents based on our query
const cursor = theaters.find(query);

O operador $geoWithin seleciona documentos com dados geoespaciais que existem dentro de uma forma especificada. O exemplo a seguir procura cinemas na área de Nova Inglaterra:

// Find theaters within a specific geographic range
async function range(theaters) {
// Define the query to find theaters within a specified polygon
const query = {
"location.geo": {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [
[
[-72, 40], // Polygon coordinates defining the range
[-74, 41],
[-72, 39],
[-72, 40],
],
],
},
},
},
};
// Find documents based on our query
const cursor = theaters.find(query);

See the MongoDB Server manual page on geospatial query operators for more information on the operators you can use in your query.