Las siguientes secciones describen las consultas admitidas por el índice 2d.
Puntos dentro de una forma definida en una superficie plana
Para seleccionar todos los pares de coordenadas heredados que se encuentran dentro de una forma determinada en una superficie plana, utilice el $geoWithin Operador junto con un operador de forma. Utilice la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $box|$polygon|$center : <coordinates> } } } )
Las siguientes consultas buscan documentos dentro de un rectángulo definido por [ 0
, 0 ] en la esquina inferior izquierda y por [ 100 , 100 ] en la esquina superior derecha.
db.places.find( { loc : { $geoWithin : { $box : [ [ 0 , 0 ] , [ 100 , 100 ] ] } } } )
Las siguientes consultas para documentos que están dentro del círculo centrado en [ -74 , 40.74 ] y con un radio de 10:
db.places.find( { loc: { $geoWithin : { $center : [ [-74, 40.74 ] , 10 ] } } } )
Para conocer la sintaxis y los ejemplos de cada forma, consulte lo siguiente:
Puntos dentro de un círculo definido en una esfera
MongoDB admite queries esféricas rudimentarias en índices planos 2d por razones heredadas. En general, los cálculos esféricos deben utilizar un índice 2dsphere, como se describe en 2dsphere Indexes.
Para consultar legacy coordinate pairs en una "cúpula esférica" sobre una esfera, utiliza $geoWithin con el operador $centerSphere. Especifica un arreglo que contenga:
Las coordenadas de cuadrícula del punto central del círculo
El radio del círculo se mide en radianes. Para calcular radianes, consulte Calcular distancias mediante geometría esférica.
Utilice la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
La siguiente consulta de ejemplo devuelve todos los documentos dentro de un radio de 10millas de longitud 88 W y latitud 30 N. El ejemplo convierte la distancia a radianes dividiendo la distancia entre el radio ecuatorial aproximado de la Tierra, 3963.2 millas:
db.<collection>.find( { loc : { $geoWithin : { $centerSphere : [ [ 88 , 30 ] , 10 / 3963.2 ] } } } )
Proximidad a un punto sobre una superficie plana
Las consultas de proximidad devuelven los pares de coordenadas heredados más cercanos al punto definido y ordenan los resultados por distancia. Utilice el operador. El operador requiere $near un 2d índice.
El operador utiliza la siguiente $near sintaxis:
db.<collection>.find( { <location field> : { $near : [ <x> , <y> ] } } )
Para ver ejemplos,$near consulte.
Coincidencias exactas en una superficie plana
No se puede usar un índice 2d para obtener una coincidencia exacta de un par de coordenadas. Use un índice escalar, ascendente o descendente, en un campo que almacene coordenadas para obtener coincidencias exactas.
En el siguiente ejemplo, la operación devolverá una coincidencia exacta en una ubicación si tiene find() un {
'loc': 1} índice:
db.<collection>.find( { loc: [ <x> , <y> ] } )
Esta consulta devolverá cualquier documento con el valor [ <x> , <y> ].