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

Query de ubicaciones que intersecan un objeto GeoJSON

Se puede query por datos de ubicación que se intersequen con un objeto GeoJSON. Por ejemplo, considere una aplicación que almacene las coordenadas de gasolineras. Puedes crear un GeoJSON LineString que represente un viaje en carretera y query las gasolineras que se crucen con la ruta del viaje.

Para query datos de ubicación que intersecten con un objeto GeoJSON, utiliza el operador $geoIntersects:

db.<collection>.find( {
<location field> : {
$geoIntersects : {
$geometry : {
type : "<GeoJSON object type>",
coordinates : [ <coordinates> ]
}
}
}
} )
  • Al especificar las coordenadas de longitud y latitud, enumere primero la longitud y luego la latitud.

    • Los valores de longitud válidos están entre -180 y 180, ambos inclusive.

    • Los valores de latitud válidos están entre -90 y 90, ambos inclusive.

  • Una ubicación se cruza con un objeto si comparte al menos un punto con el objeto especificado. Esto incluye objetos que comparten un borde.

  • $geoIntersects no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejora el rendimiento de las query. Solo el índice geoespacial 2dsphere admite $geoIntersects. Para obtener más información, consulta Crea un índice 2dsphere.

Crea una colección gasStations que contenga estos documentos:

db.gasStations.insertMany( [
{
loc: { type: "Point", coordinates: [ -106.31, 35.65 ] },
state: "New Mexico",
country: "United States",
name: "Horizons Gas Station"
},
{
loc: { type: "Point", coordinates: [ -122.62, 40.75 ] },
state: "California",
country: "United States",
name: "Car and Truck Rest Area"
},
{
loc: { type: "Point", coordinates: [ -72.71, 44.15 ] },
state: "Vermont",
country: "United States",
name: "Ready Gas and Snacks"
}
] )

La siguiente $geoIntersects query especifica una LineString que contiene cuatro puntos y devuelve documentos que se intersectan con la línea:

db.gasStations.find( {
loc: {
$geoIntersects: {
$geometry: {
type: "LineString",
coordinates: [
[ -105.82, 33.87 ],
[ -106.01, 34.09 ],
[ -106.31, 35.65 ],
[ -107.39, 35.98 ]
]
}
}
}
} )

Salida:

[
{
_id: ObjectId("63f658d45e5eefbdfef81ca4"),
loc: { type: 'Point', coordinates: [ -106.31, 35.65 ] },
state: 'New Mexico',
country: 'United States',
name: 'Horizons Gas Station'
}
]