Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’APPLIQUE À : MongoDB vCore
Les données géospatiales peuvent désormais être stockées et interrogées à l’aide d’Azure Cosmos DB for MongoDB basé sur vCore. Cette amélioration fournit des outils puissants pour gérer et analyser les données spatiales, ce qui autorise un large éventail d’applications telles que le suivi de l’emplacement en temps réel, l’optimisation des itinéraires et l’analytique spatiale.
Voici une vue d’ensemble rapide des commandes et opérateurs géospatiaux désormais pris en charge :
Opérateurs de requêtes géospatiales
$geoIntersects
Sélectionne les documents dans lesquels une géométrie spécifiée intersecte avec la géométrie des documents. Utile pour rechercher des documents qui partagent une partie de l’espace avec une géométrie donnée.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
Sélectionne les documents avec des données géospatiales qui existent entièrement à l’intérieur d’une forme spécifiée. Cet opérateur est utilisé pour rechercher des documents dans une zone définie.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
Définit une zone rectangulaire à l’aide de deux paires de coordonnées (coin inférieur gauche et coin supérieur droit). Utilisé avec l’opérateur $geoWithin
pour rechercher des documents à l’intérieur de ce rectangle. Vous pouvez par exemple rechercher toutes les localisations dans une région rectangulaire sur une carte.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
Définit une zone circulaire à l’aide d’un point central et d’un rayon en radians. Utilisé avec l’opérateur $geoWithin
pour rechercher des documents à l’intérieur de ce cercle.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
Similaire à $center
, mais définit une zone sphérique à l’aide d’un point central et d’un rayon en radians. Utile pour les calculs de géométrie sphérique.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
Spécifie un objet GeoJSON pour définir une géométrie. Utilisé avec des opérateurs géospatiaux pour effectuer des requêtes basées sur des formes complexes.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
Spécifie la distance maximale d’un point pour une requête géospatiale. Utilisé avec les opérateurs $near
et $nearSphere
. Vous pouvez par exemple rechercher toutes les localisations situées à moins de deux kilomètres d’un point donné.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
Spécifie la distance minimale d’un point pour une requête géospatiale. Utilisé avec les opérateurs $near
et $nearSphere
.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
Définit un polygone à l’aide d’un tableau de paires de coordonnées. Utilisé avec l’opérateur $geoWithin
pour rechercher des documents à l’intérieur de ce polygone.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
Recherche les documents proches d’un point spécifié. Retourne les documents triés par distance à partir du point. Vous pouvez par exemple rechercher les restaurants les plus proches de la localisation d’un utilisateur.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
Similaire à $near
, mais effectue des calculs sur une surface sphérique. Utile pour des calculs de distance plus précis sur la surface de la Terre.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
Phase d’agrégation géospatiale
$geoNear
Effectue une requête géospatiale pour retourner des documents triés par distance à partir d’un point spécifié. Peut inclure des critères de requête supplémentaires et retourner des informations de distance.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
Considérations et fonctionnalités non prises en charge
Actuellement, l’interrogation avec un polygone GeoJSON à anneau unique dont la zone dépasse un seul hémisphère n’est pas prise en charge. Dans ces cas-là, Mongo vCore retourne le message d’erreur suivant :
Error: Custom CRS for big polygon is not supported yet.
Un index composite utilisant un index normal et un index géospatial n’est pas autorisé. Par exemple :
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yet
Les polygones avec trous ne sont actuellement pas pris en charge pour une utilisation avec des requêtes $geoWithin. Bien que l’insertion d’un polygone avec trous ne soit pas restreinte, elle finit par échouer avec le message d’erreur suivant :
Error: $geoWithin currently doesn't support polygons with holes
Le champ clé est toujours requis lors de la phase d’agrégation $geoNear. Si le champ de clé est manquant, l’erreur suivante se produit :
Error: $geoNear requires a 'key' option as a String
Les phases
$geoNear
,$near
et$nearSphere
n’ont pas d’exigences strictes en matières d’index. Ces requêtes n’échouent donc pas si un index est manquant.
Contenu connexe
- En savoir plus sur la compatibilité des fonctionnalités avec MongoDB.
- Passez en revue les options de migration de MongoDB vers Azure Cosmos DB for MongoDB vCore.