Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Buscar geoespacialmente

Puede consultar datos en función de la ubicación geográfica utilizando operadores del query geoespacial. Puedes formatear consultas geoespaciales usando uno de los siguientes sistemas de coordenadas:

Esta sección contiene ejemplos de consultas geoespaciales utilizando diferentes operadores del query que puedes ejecutar en tu conjunto de datos de muestra de Atlas.

Para consultas geoespaciales que utilizan coordenadas de longitud y latitud en una esfera similar a la Tierra, utilice el formato de consulta GeoJSON. Si bien GeoJSON tiene varios tipos, todos los tipos de datos GeoJSON utilizan alguna forma de la siguiente estructura:

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

El tipo de objeto determina la cantidad de coordenadas. Por ejemplo, un Point requiere solo una coordenada: una longitud y una latitud. Un Line utiliza dos coordenadas: una longitud y una latitud para cada extremo. Un Polygon consiste en una lista de coordenadas donde la primera y la última coordenada son iguales, cerrando así el polígono. Para obtener más información sobre las formas GeoJSON que puede usar en MongoDB, consulte la entrada del manual de GeoJSON.

Para habilitar las consultas de datos GeoJSON, debes añadir el campo a un índice 2dsphere. El siguiente snippet crea un índice en el campo location.geo en la colección theaters usando el método createIndex():

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

También puedes expresar consultas geoespaciales usando x y y coordenadas en un plano euclidiano bidimensional. Hasta MongoDB, este era el único formato compatible con consultas geoespaciales, y ahora se denominan "legacy coordinate pairs".

Legacy coordinate pairs utilizan la siguiente estructura:

<field> : [ x, y ]

El campo contiene un arreglo de dos valores donde el primero representa el valor del eje x y el segundo representa el valor del eje y.

Para habilitar la consulta usando pares de coordenadas heredados, crea un índice 2d en el campo de la colección. El siguiente snippet crea un índice en el campo coordinates en la colección shipwrecks usando el método createIndex():

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

Consulte la página del manual del servidor MongoDB sobre pares de coordenadas heredados para obtener más información.

Nota

Los índices esféricos (2dsphere) y planos (2d) admiten algunos, pero no todos, los mismos operadores del query. Para obtener una lista completa de los operadores y su compatibilidad con índices, consulte la entrada del manual para consultas geoespaciales.

Los siguientes ejemplos utilizan el conjunto de datos de muestra de MongoDB Atlas. Puede aprender cómo configurar su propio clúster Atlas de nivel gratuito y cómo cargar el conjunto de datos de muestra en nuestra guía de iniciación.

Los ejemplos utilizan la colección theaters en la base de datos sample_mflix del conjunto de datos de muestra. La colección theaters contiene un índice 2dsphere en el campo location.geo.

El operador $near acepta un conjunto de coordenadas de latitud y longitud y devuelve documentos ordenados del más cercano al más lejano. Para limitar los resultados a una distancia máxima en metros, utilice la opción $maxDistance. Para obtener una lista completa de opciones, consulte la documentación de referencia de $near. El siguiente ejemplo busca teatros a una distancia 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);

El operador $geoWithin selecciona documentos con datos geoespaciales que se encuentran dentro de una forma geográfica específica. El siguiente ejemplo busca cines en la zona de Nueva 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);

Consulte la página del manual del servidor MongoDB sobre operadores de consultas geoespaciales para obtener más información sobre los operadores que puede utilizar en su consulta.