Para query datos de ubicación dentro de una forma especificada en una superficie plana, use el $geoWithin operador. Para usar $geoWithin con datos que aparecen en una superficie plana, utiliza esta sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { <shape operator> : <coordinates> } } } )
Reemplaza estos valores para tu query:
Campo | Descripción |
|---|---|
| La colección a query. |
| El campo que contiene sus datos de ubicación. Para consultas en una superficie plana, tus datos deben almacenarse como legacy coordinate pairs. |
| |
| Las coordenadas que definen los bordes de la forma que se va a query. Cuando se utiliza con el operador Al especificar las coordenadas de longitud y latitud, enumere primero la longitud y luego la latitud.
|
Acerca de esta tarea
$geoWithin no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejora el rendimiento de las query.
Antes de comenzar
Crear la colección contacts:
db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] )
El campo address contiene legacy coordinate pairs.
Procedimiento
Utiliza $geoWithin para query la colección contacts. La siguiente $geoWithin query utiliza el operador $box para devolver documentos que aparecen dentro de un rectángulo especificado:
db.contacts.find( { address: { $geoWithin: { $box: [ [ 49, 40 ], [ 60, 60 ] ] } } } )
Salida:
[ { _id: ObjectId("647e4e496cdaf4dc323ec92a"), name: 'Evander Otylia', phone: '202-555-0193', address: [ 55.5, 42.3 ] } ]
Los valores del operador $box representan las esquinas inferior izquierda y superior derecha del rectángulo que se va a query.
La $geoWithin query mostrada anteriormente devuelve documentos que están dentro de un rectángulo que tiene estos vértices:
[ 49, 40 ][ 49, 60 ][ 60, 60 ][ 60, 40 ]
Obtén más información
Para aprender a utilizar el operador $geoWithin con otras formas, consulta estas páginas: