Ce chapitre présente l'une des fonctions de requête géospatiale de MongoDB, qui consiste à interroger les données de document en fonction de la distance.

Scénarios d'application : recherche de magasins à proximité, et recherche de personnes à proximité.

Tutoriel préalable

Format de stockage des données géospatiales de MongoDB

Les prérequis pour interroger les données en fonction de la distance sont les suivants :

  • Chaque donnée de document contient un champ qui stocke des données de coordonnées, par exemple : le champ emplacement stocke les coordonnées d'un magasin.
  • Créer un index spatial 2dsphere ou 2d.

L'opérateur $near

MongoDB utilise l'opérateur $near pour interroger les données de document en fonction de la distance.

Format :

{
   <champ d'emplacement> : { // Champ qui stocke les données de coordonnées
     $near: {
       $geometry: { // Définir les coordonnées de référence pour la comparaison
          type: "Point" ,
          coordinates: [ longitude , latitude ]
       },
       $maxDistance: distance maximale, en mètres,
       $minDistance: distance minimale, en mètres
     }
   }
}

Remarque : Les données renvoyées par la requête $near sont triées de la plus proche à la plus éloignée.

Exemple

Supposons que la collection magasin stocke les données des magasins, où le champ emplacement stocke les coordonnées de chaque magasin. La requête suivante trouve le magasin le plus proche de moi (distance minimale 1000 mètres, distance maximale 5000 mètres).

db.magasin.find(
   {
     location:
       { $near :
          {
            $geometry: { type: "Point",  coordinates: [ -73.9667, 40.78 ] }, // Mes coordonnées
            $minDistance: 1000, // Distance minimale
            $maxDistance: 5000 // Distance maximale
          }
       }
   }
)