Ce chapitre présente la requête géospatiale de MongoDB, qui prend en charge les requêtes d'intersection et de contenu géométrique.

Scénarios d'application :

  • Dessiner un cercle sur la carte et interroger les données à l'intérieur du cercle.

Tutoriel préalable

Formats de stockage de données géospatiales pour MongoDB

Les prérequis pour interroger les données basées sur la distance sont les suivants :

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

Opérateur $geoWithin

Il est couramment utilisé pour interroger les points de coordonnées contenus dans une plage géométrique spécifiée, par exemple : lors de la recherche de maisons en dessinant sur une carte, dessinez une zone sur la carte et interrogez les maisons dans cette zone.

Format de syntaxe :

{
   <champ d'emplacement>: { // Champ de requête
      $geoWithin: {
         $geometry: {
            type:  , // Prise en charge uniquement de Polygone ou MultiPolygone.
            coordinates: [ <coordonnées> ]  // Collection de points de coordonnées géométriques
         }
      }
   }
}

Exemple :

db.places.find(
   {
     loc: { // Le champ loc stocke les données de coordonnées
       $geoWithin: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Trouver des données à l'intérieur de cette zone géométrique
          }
       }
     }
   }
)

Interroger les données de document à l'intérieur de la zone géométrique spécifiée dans la collection places.

Opérateur $geoIntersects

La différence par rapport à $geoWithin est que $geoIntersects est utilisé pour déterminer s'il y a une intersection entre deux géométries.

Format :

{
  <champ d'emplacement>: { // Champ stockant des points de coordonnées géométriques
     $geoIntersects: {
        $geometry: {
           type: "<type d'objet geojson>" , // Type géométrique
           coordinates: [ <coordonnées> ] // Collection de points de coordonnées géométriques, interroger les données avec une intersection avec cette géométrie
        }
     }
  }
}

Exemple :

db.places.find(
   {
     loc: { // Le champ loc stocke des données de zone, qui est une forme géométrique
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Interroger les données avec une intersection avec cette géométrie
             ]
          }
       }
     }
   }
)