Puedes query los datos de ubicación que aparecen cerca de un punto específico en una esfera.
Para query datos de ubicación cerca de un punto especificado, utilice el operador $near:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point", coordinates : [ <longitude>, <latitude> ] }, $maxDistance : <distance in meters> } } } )
Acerca de esta tarea
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
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Especifique la distancia en el campo
$maxDistanceen metros.
Antes de comenzar
Crea una colección
placesque 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" } ] ) Los valores en el campo
locson puntos GeoJSON.Para consultar datos de ubicación con el operador
$near, debes crear un índice geoespacial en el campo que contiene los datos de ubicación.Crea un índice 2dsphere en el campo
loc:db.places.createIndex( { "loc": "2dsphere" } )
Procedimiento
Utiliza $near para query la colección. La siguiente $near query devuelve documentos que tienen un loc campo a una distancia de 5000 metros de un punto GeoJSON ubicado en [ -73.92, 40.78 ]:
db.places.find( { loc: { $near: { $geometry: { type: "Point", coordinates: [ -73.92, 40.78 ] }, $maxDistance : 5000 } } } )
Salida:
[ { _id: ObjectId("63f7c3b15e5eefbdfef81cab"), loc: { type: 'Point', coordinates: [ -73.88, 40.78 ] }, name: 'La Guardia Airport', category: 'Airport' }, { _id: ObjectId("63f7c3b15e5eefbdfef81caa"), loc: { type: 'Point', coordinates: [ -73.97, 40.77 ] }, name: 'Central Park', category: 'Park' } ]
Los resultados se ordenan por distancia desde el punto consultado, de más cercano a más lejano.