Este capítulo presenta una de las funciones de consulta geoespacial de MongoDB, que es la consulta de datos de documentos basada en la distancia.

Escenarios de aplicación: búsqueda de tiendas cercanas y localización de personas cercanas.

Tutorial Requerido

Formato de Almacenamiento de Datos Geoespaciales de MongoDB

Los requisitos previos para consultar datos basados en la distancia son los siguientes:

  • Cada dato del documento contiene un campo que almacena datos de coordenadas, por ejemplo: el campo location almacena las coordenadas de una tienda.
  • Crear un índice espacial 2dsphere o 2d.

El Operador $near

MongoDB utiliza el operador $near para consultar datos de documentos basados en la distancia.

Formato:

{
   <campo de ubicación>: { // Campo que almacena los datos de coordenadas
     $near: {
       $geometry: { // Establecer las coordenadas de referencia para la comparación
          type: "Point" ,
          coordinates: [ longitud , latitud ]
       },
       $maxDistance: distancia máxima, en metros,
       $minDistance: distancia mínima, en metros
     }
   }
}

Nota: Los datos devueltos por la consulta $near están ordenados de más cercanos a más lejanos.

Ejemplo

Supongamos que la colección shop almacena datos de tiendas, donde el campo location almacena las coordenadas de cada tienda. La siguiente consulta encuentra la tienda más cercana a mí (distancia mínima 1000 metros, distancia máxima 5000 metros).

db.shop.find(
   {
     location:
       { $near :
          {
            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] }, // Mis coordenadas
            $minDistance: 1000, // Distancia mínima
            $maxDistance: 5000 // Distancia máxima
          }
       }
   }
)