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