Las siguientes secciones describen consultas compatibles con el índice 2d.
Puntos dentro de una forma definida en una superficie plana
Para seleccionar todos los legacy coordinate pairs encontrados dentro de una figura dada en una superficie plana, se debe utilizar la función $geoWithin operador junto con un operador de formas. Usa la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $box|$polygon|$center : <coordinates> } } } )
Las siguientes consultas para 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 consultar la sintaxis y ejemplos para cada forma, ve 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 los radianes, consulta Calcular distancia utilizando geometría esférica.
Utiliza 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 10 millas 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 legacy coordinate pairs más cercanos al punto definido y ordenan los resultados por distancia. Utiliza cualquiera de los operadores $near. El operador requiere un índice de 2d.
El operador $near utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $near : [ <x> , <y> ] } } )
Para ejemplos, consulta $near.
Coincidencias exactas en una superficie plana
No se puede usar un índice 2d para devolver una coincidencia exacta de un par de coordenadas. Utiliza un índice escalar, ascendente o descendente, en un campo que almacene coordenadas para devolver coincidencias exactas.
En el siguiente ejemplo, la operación find() devolverá una coincidencia exacta en una ubicación si tienes un índice {
'loc': 1}:
db.<collection>.find( { loc: [ <x> , <y> ] } )
Esta consulta devolverá cualquier documento con el valor [ <x> , <y> ].