Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

geoWithin Operador

geoWithin

El operador geoWithin permite consultar puntos geográficos dentro de una geometría determinada. Solo se devuelven puntos, incluso si indexShapes el valor es true en 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 -180 y 180, ambos inclusive. Los valores de latitud pueden estar entre -90 y 90, 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])

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>
}
}
}

geoWithin utiliza los siguientes términos para construir una query:

Campo
Tipo
Descripción
Necesidad

box

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: box, circle o geometry.

Condicional

circle

Objeto

Objeto que especifica el punto central y el radio en metros dentro del cual buscar. El objeto contiene los siguientes campos GeoJSON:

  • center - Centro del círculo especificado como un puntoGeoJSON.

  • radius - Radio, que es un número, especificado en metros. El valor debe ser mayor o igual que 0.

Para aprender a especificar datos GeoJSON dentro de un objeto GeoJSON, consulta objetos GeoJSON.

Se requiere uno de los siguientes: circle, box o geometry.

Condicional

geometry

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: geometry, box o circle.

Condicional

path

string o arreglo de strings

Campo o campos de tipo geo indexados para búsqueda.

score

Objeto

Puntuación para asignar a los resultados de búsqueda coincidentes. Por defecto, la puntuación en los resultados es 1. Puedes modificar la puntuación utilizando las siguientes opciones:

  • boostMultiplica la puntuación resultante por el número dado.

  • constant: reemplazar la puntuación del resultado por el número dado.

  • function: reemplaza el resultado de la puntuación con la expresión dada.

Para obtener información sobre cómo usar score en tu query, consulta Calificación de los Documentos en los Resultados.

no

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}

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:

  • $limit etapa para limitar la salida a 3 resultados.

  • Etapa $project para excluir todos los campos excepto name y address.

Nota

No necesitas especificar índices llamados default en tu MongoDB Search query. Si tu índice tiene cualquier otro nombre, debes especificar el campo index.

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:

  • $limit etapa para limitar la salida a 3 resultados.

  • etapa de $project para excluir todos los campos excepto name y address, 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.

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.