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 dentro de un círculo en una esfera

Se puede query datos de ubicación dentro de un círculo en la superficie de una esfera. Utiliza estas queries para devolver datos dentro de una capa esférica.

Para consultar datos de ubicación dentro de un círculo en una esfera, utilice $geoWithin con el operador $centerSphere. En el operador $centerSphere, especifique las coordenadas y el radio del círculo dentro del cual query:

db.<collection>.find( {
<location field> : {
$geoWithin : {
$centerSphere: [
[ <longitude>, <latitude> ],
<radius>
]
}
}
} )
  • 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.

  • En el operador $centerSphere, especifica el radio del círculo en radianes. Para convertir otras unidades a y desde radianes, consulta Convertir distancia a radianes para operadores esféricos.

    • Este ejemplo calcula la distancia en kilómetros. Para convertir kilómetros a radianes, divide el valor en kilómetros por 6378.1.
  • $geoWithin no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejora el rendimiento de las query. Solo el índice geoespacial 2dsphere admite $geoWithin. Para obtener más información, consulta Crea un índice 2dsphere.

Crea una colección places que contenga estos documentos:

db.places.insertMany( [
{
loc: { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Park"
},
{
loc: { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category: "Airport"
},
{
loc: { type: "Point", coordinates: [ -1.83, 51.18 ] },
name: "Stonehenge",
category : "Monument"
}
] )

Para consultar la colección, use $geoWithin con el operador $centerSphere:

db.places.find( {
loc: {
$geoWithin: {
$centerSphere: [
[ -1.76, 51.16 ],
10 / 6378.1
]
}
}
} )

La query devuelve documentos en los que el campo loc se encuentra dentro de un radio de 10 kilómetros de un punto en la longitud -1.76, latitud 51.16.

Salida:

[
{
_id: ObjectId("63fd205e4a08b5e248c03e32"),
loc: { type: 'Point', coordinates: [ -1.83, 51.18 ] },
name: 'Stonehenge',
category: 'Monument'
}
]