$near - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

$near

L'$nearopérateur d'Amazon DocumentDB est utilisé pour rechercher des documents situés géographiquement à proximité d'un point spécifique. Il renvoie les documents classés par distance, en commençant par les documents les plus proches. Cet opérateur nécessite un index géospatial à deux sphères et est utile pour les requêtes de proximité sur les données de localisation.

Paramètres

  • $geometry: objet Point GeoJSON qui définit le point central de la requête de proximité.

  • $maxDistance: (facultatif) Distance maximale en mètres à partir du point spécifié qu'un document peut atteindre pour correspondre à la requête.

  • $minDistance: (facultatif) Distance minimale en mètres à partir du point spécifié qu'un document peut atteindre pour correspondre à la requête.

Exigences relatives à l'indice

  • 2dsphere index: obligatoire pour les requêtes géospatiales sur les données de points GeoJSON.

Exemple (MongoDB Shell)

L'exemple suivant montre comment utiliser l'$nearopérateur pour trouver les restaurants les plus proches d'un lieu spécifique à Seattle, dans l'État de Washington.

Création d'exemples de documents

db.usarestaurants.insert([ { "name": "Noodle House", "city": "Seattle", "state": "Washington", "rating": 4.8, "location": { "type": "Point", "coordinates": [-122.3517, 47.6159] } }, { "name": "Pike Place Grill", "city": "Seattle", "state": "Washington", "rating": 4.2, "location": { "type": "Point", "coordinates": [-122.3403, 47.6062] } }, { "name": "Lola", "city": "Seattle", "state": "Washington", "rating": 4.5, "location": { "type": "Point", "coordinates": [-122.3407, 47.6107] } } ]);

Créer un index 2dsphere

db.usarestaurants.createIndex({ "location": "2dsphere" });

Exemple de requête avec GeoJSON Point

db.usarestaurants.find({ location: { $near: { $geometry: { type: "Point", coordinates: [-122.3516, 47.6156] }, $maxDistance: 100, $minDistance: 10 } } });

Sortie

{ "_id" : ObjectId("69031ec9ea1c2922a1ce5f4a"), "name" : "Noodle House", "city" : "Seattle", "state" : "Washington", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3517, 47.6159 ] } }

Exemples de code

Pour afficher un exemple de code d'utilisation de la $near commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

Node.js
const { MongoClient } = require('mongodb'); async function findNearbyRestaurants() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const restaurants = db.collection('usarestaurants'); // Create 2dsphere index await restaurants.createIndex({ "location": "2dsphere" }); const result = await restaurants.find({ location: { $near: { $geometry: { type: "Point", coordinates: [-122.3516, 47.6156] }, $maxDistance: 100, $minDistance: 10 } } }).toArray(); console.log(result); client.close(); } findNearbyRestaurants();
Python
from pymongo import MongoClient def find_nearby_restaurants(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] restaurants = db['usarestaurants'] # Create 2dsphere index restaurants.create_index([("location", "2dsphere")]) result = list(restaurants.find({ 'location': { '$near': { '$geometry': { 'type': 'Point', 'coordinates': [-122.3516, 47.6156] }, '$maxDistance': 100, '$minDistance': 10 } } })) print(result) client.close() find_nearby_restaurants()