Definición
geoWithinEl operador
geoWithinpermite consultar puntos geográficos dentro de una geometría determinada. Solo se devuelven puntos, incluso siindexShapesel valor estrueen la definición del índice.Puedes query los puntos dentro de un:
Círculo
Cuadro delimitador
polígono
Al especificar las coordenadas para la búsqueda, primero se debe especificar la longitud y luego la latitud. Los valores de longitud pueden estar entre
-180y180, ambos inclusive. Los valores de latitud pueden estar entre-90y90, ambos inclusive. Los valores de coordenadas pueden ser enteros o dobles.Nota
MongoDB Search no admite lo siguiente:
Sistema de referencia de coordenadas (CRS) no por defecto
Sistema de coordenadas XY plano (2 dimensiones)
Pares coordinados Notación de puntos (es decir,
pointFieldName: [12, 34])
Sintaxis
geoWithin tiene la siguiente sintaxis:
{ "$search": { "index": <index name>, // optional, defaults to "default" "geoWithin": { "path": "<field-to-search>", "box | circle | geometry": <object>, "score": <score-options> } } }
opciones
geoWithin utiliza los siguientes términos para construir una query:
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| Objeto | Objeto que especifica los puntos GeoJSON inferior izquierdo y superior derecho de una caja en la que buscar. El objeto acepta los siguientes campos:
Para aprender a especificar datos GeoJSON dentro de un objeto GeoJSON, consulta objetos GeoJSON. Se requiere uno de los siguientes: | Condicional |
| Objeto | Objeto que especifica el punto central y el radio en metros dentro del cual buscar. El objeto contiene los siguientes campos GeoJSON:
Para aprender a especificar datos GeoJSON dentro de un objeto GeoJSON, consulta objetos GeoJSON. Se requiere uno de los siguientes: | Condicional |
| Objeto GeoJSON | Objeto GeoJSON que especifica el MultiPolígono o el Polígono dentro del cual se realizará la búsqueda. El polígono debe especificarse como un bucle cerrado donde la última posición sea la misma que la primera. Al calcular resultados geoespaciales, los operadores de MongoDB Search geoShape y geoWithin, así como el operador de MongoDB $geoIntersects, utilizan diferentes geometrías. Esta diferencia se puede observar en cómo MongoDB Search y MongoDB dibujan los bordes poligonales. MongoDB Search dibuja polígonos basados en distancia cartesiana, que es la línea más corta entre dos puntos en el sistema de referencia de coordenadas. MongoDB dibuja polígonos utilizando el modo geodésico con 2índices dsphere que están construidos sobre una librería de terceros para tipos geodésicos, o el modo plano, de 2índices d. Para obtener más información, consulte Objetos GeoJSON. MongoDB Search y MongoDB podrían devolver resultados diferentes para queries geoespaciales que incluyan polígonos. Para aprender a especificar datos GeoJSON dentro de un objeto GeoJSON, consulta objetos GeoJSON. Se requiere uno de los siguientes: | Condicional |
| string o arreglo de strings | Campo o campos de tipo geo indexados para búsqueda. | Sí |
| Objeto | Puntuación para asignar a los resultados de búsqueda coincidentes. Por defecto, la puntuación en los resultados es
Para obtener información sobre cómo usar | no |
Ejemplos
Los siguientes ejemplos utilizan la colección listingsAndReviews en la base de datos sample_airbnb. Si tienes el conjunto de datos de muestra en tu clúster, puedes crear un índice de búsqueda personalizado de MongoDB para el tipo geo y ejecutar las consultas de ejemplo en tu clúster.
Utiliza la siguiente muestra de definición de índice para la indexación del campo address.location de la colección listingsAndReviews:
1 { 2 "mappings": { 3 "fields": { 4 "address": { 5 "fields": { 6 "location": { 7 "type": "geo" 8 } 9 }, 10 "type": "document" 11 }, 12 "property_type": { 13 "type": "token" 14 } 15 } 16 } 17 }
box Ejemplo
La siguiente query utiliza el operador geoWithin con el campo box para buscar propiedades dentro de un cuadro delimitador en Australia.
La query incluye lo siguiente:
$limitetapa para limitar la salida a3resultados.Etapa
$projectpara excluir todos los campos exceptonameyaddress.
Nota
No necesitas especificar índices llamados default en tu MongoDB Search query. Si tu índice tiene cualquier otro nombre, debes especificar el campo index.
Ejemplo básico
Ejemplo de metadatos
circle Ejemplo
La siguiente query utiliza el operador geoWithin con el campo circle para buscar propiedades dentro de un radio de una milla de las coordenadas especificadas en Canadá.
La query incluye lo siguiente:
$limitetapa para limitar la salida a3resultados.etapa de
$projectpara excluir todos los campos exceptonameyaddress, y para los ejemplos de Compass, consulte los pasos requeridos.
Nota
No necesitas especificar índices llamados default en tu MongoDB Search query. Si tu índice tiene cualquier otro nombre, debes especificar el campo index.
geometry Ejemplos
Los siguientes ejemplos usan el operador geoWithin con el campo geometry para buscar propiedades en Hawái. El campo type especifica si el área es un GeoJSON Polígono o un MultiPolígono.
Nota
No necesitas especificar índices llamados default en tu MongoDB Search query. Si tu índice tiene cualquier otro nombre, debes especificar el campo index.