Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
$geoWithin
Amazon DocumentDB 中的$geoWithin运算符用于查找位置数据(表示为 GeoJSON 对象)完全包含在指定形状(例如多边形或多面)内的文档。这对于查询位于特定地理区域内的对象非常有用。
参数
示例(MongoDB 外壳)
以下示例演示如何使用$geoWithin运算符查找位于纽约州内的所有机场。
创建示例文档
// Insert state document
db.states.insert({
"name": "New York",
"loc": {
"type": "Polygon",
"coordinates": [[
[-79.76278, 45.0],
[-73.94, 45.0],
[-73.94, 40.5],
[-79.76278, 40.5],
[-79.76278, 45.0]
]]
}
});
// Insert airport documents
db.airports.insert([
{
"name": "John F. Kennedy International Airport",
"type": "airport",
"code": "JFK",
"loc": {
"type": "Point",
"coordinates": [-73.7781, 40.6413]
}
},
{
"name": "LaGuardia Airport",
"type": "airport",
"code": "LGA",
"loc": {
"type": "Point",
"coordinates": [-73.8772, 40.7769]
}
},
{
"name": "Buffalo Niagara International Airport",
"type": "airport",
"code": "BUF",
"loc": {
"type": "Point",
"coordinates": [-78.7322, 42.9403]
}
}
]);
查询示例
var state = db.states.findOne({"name": "New York"});
db.airports.find({
"loc": {
"$geoWithin": {
"$geometry": state.loc
}
}
}, {
"name": 1,
"type": 1,
"code": 1,
"_id": 0
});
输出
[
{
"name": "John F. Kennedy International Airport",
"type": "airport",
"code": "JFK"
},
{
"name": "LaGuardia Airport",
"type": "airport",
"code": "LGA"
}
]
代码示例
要查看使用该$geoWithin命令的代码示例,请选择要使用的语言的选项卡:
- Node.js
-
const { MongoClient } = require('mongodb');
async function findAirportsWithinState(stateName) {
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 stateDoc = await db.collection('states').findOne({ name: stateName }, { projection: { _id: 0, loc: 1 } });
const airportDocs = await db.collection('airports').find({
loc: {
$geoWithin: {
$geometry: stateDoc.loc
}
}
}, { projection: { name: 1, type: 1, code: 1, _id: 0 } }).toArray();
console.log(airportDocs);
await client.close();
}
findAirportsWithinState('New York');
- Python
-
from pymongo import MongoClient
def find_airports_within_state(state_name):
try:
client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
state_doc = db.states.find_one({'name': state_name}, {'_id': 0, 'loc': 1})
airport_docs = db.airports.find({
'loc': {
'$geoWithin': {
'$geometry': state_doc['loc']
}
}
}, {'name': 1, 'type': 1, 'code': 1, '_id': 0})
return list(airport_docs)
except Exception as e:
print(f'Error: {e}')
finally:
client.close()
airports = find_airports_within_state('New York')
print(airports)