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