本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
$nearSphere
Amazon DocumentDB 中的$nearSphere運算子用於尋找地理空間點指定距離內的文件。此運算子對於地理空間查詢特別有用,例如尋找指定位置特定半徑內的所有餐廳。
參數
-
$geometry:代表參考點的 GeoJSON 物件。必須是具有 type和 coordinates 欄位的Point物件。
-
$minDistance:(選用) 文件必須距參考點的最小距離 (公尺)。
-
$maxDistance:(選用) 文件必須距參考點的最大距離 (以公尺為單位)。
範例 (MongoDB Shell)
在此範例中,我們會在華盛頓州西雅圖特定位置 2 公里 (2000 公尺) 內找到所有餐廳。
建立範例文件
db.usarestaurants.insert([
{
name: "Noodle House",
location: { type: "Point", coordinates: [-122.3516, 47.6156] }
},
{
name: "Pike Place Grill",
location: { type: "Point", coordinates: [-122.3403, 47.6101] }
},
{
name: "Seattle Coffee Co.",
location: { type: "Point", coordinates: [-122.3339, 47.6062] }
}
]);
查詢範例
db.usarestaurants.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [-122.3516, 47.6156]
},
$minDistance: 1,
$maxDistance: 2000
}
}
}, {
name: 1
});
輸出
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
程式碼範例
若要檢視使用 $nearSphere命令的程式碼範例,請選擇您要使用的語言標籤:
- 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');
const result = await restaurants.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [-122.3516, 47.6156]
},
$minDistance: 1,
$maxDistance: 2000
}
}
}, {
projection: { name: 1 }
}).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
result = list(restaurants.find({
'location': {
'$nearSphere': {
'$geometry': {
'type': 'Point',
'coordinates': [-122.3516, 47.6156]
},
'$minDistance': 1,
'$maxDistance': 2000
}
}
}, {
'name': 1
}))
print(result)
client.close()
find_nearby_restaurants()