$geowithin - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

$geowithin

$geoWithinOperator di Amazon DocumentDB digunakan untuk menemukan dokumen yang data lokasinya (direpresentasikan sebagai objek GeoJSON) sepenuhnya terkandung dalam bentuk tertentu, seperti poligon atau multipoligon. Ini berguna untuk menanyakan objek yang terletak di dalam wilayah geografis tertentu.

Parameter

  • $geometry: Sebuah objek GeoJSON yang mewakili bentuk untuk query terhadap.

Contoh (MongoDB Shell)

Contoh berikut menunjukkan bagaimana menggunakan $geoWithin operator untuk menemukan semua bandara yang terletak di negara bagian New York.

Buat dokumen sampel

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

Contoh kueri

var state = db.states.findOne({"name": "New York"}); db.airports.find({ "loc": { "$geoWithin": { "$geometry": state.loc } } }, { "name": 1, "type": 1, "code": 1, "_id": 0 });

Keluaran

[ { "name": "John F. Kennedy International Airport", "type": "airport", "code": "JFK" }, { "name": "LaGuardia Airport", "type": "airport", "code": "LGA" } ]

Contoh kode

Untuk melihat contoh kode untuk menggunakan $geoWithin perintah, pilih tab untuk bahasa yang ingin Anda gunakan:

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)