บทนี้จะแนะนำฟังก์ชันการค้นหาทางภูมิศาสตร์ของ MongoDB ที่เป็นการค้นหาข้อมูลเอกสารโดยใช้ระยะทาง
สถานการณ์การใช้งาน: ค้นหาร้านค้าที่อยู่ใกล้ ๆ และการค้นหาบุคคลที่อยู่ใกล้ ๆ
บทช่วยสอนที่ต้องการ
รูปแบบการจัดเก็บข้อมูลทางภูมิศาสตร์ของ MongoDB
การต้องการก่อนการค้นหาข้อมูลโดยใช้ระยะทางคือดังนี้:
- ข้อมูลเอกสารแต่ละรายการมีฟิลด์ที่เก็บข้อมูลพิกัด เช่น: ฟิลด์
location
เก็บพิกัดของร้านค้า - สร้างดัชนีพื้นที่ 2dsphere หรือ 2d
ตัวดำเนินการ $near
MongoDB ใช้ตัวดำเนินการ $near เพื่อค้นหาข้อมูลเอกสารโดยใช้ระยะทาง
รูปแบบ:
{
<location field>: { // ฟิลด์ที่เก็บข้อมูลพิกัด
$near: {
$geometry: { // ตั้งค่าพิกัดอ้างอิงเพื่อเปรียบเทียบ
type: "Point" ,
coordinates: [ ลองจิจูด , ละติจูด ]
},
$maxDistance: ระยะทางสูงสุด, เป็นเมตร,
$minDistance: ระยะทางต่ำสุด, เป็นเมตร
}
}
}
หมายเหตุ: ข้อมูลที่คืนโดยการค้นหา $near จะถูกเรียงลำดับจากใกล้ที่สุดไปห่างที่สุด
ตัวอย่าง
สมมติว่าคอลเลกชัน shop
เก็บข้อมูลร้านค้า โดยฟิลด์ location
เก็บพิกัดของแต่ละร้านค้า การค้นหาต่อไปนี้จะหาร้านค้าที่อยู่ใกล้ฉัน (ระยะทางต่ำสุด 1000 เมตร และระยะทางสูงสุด 5000 เมตร)
db.shop.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // พิกัดของฉัน
$minDistance: 1000, // ระยะทางต่ำสุด
$maxDistance: 5000 // ระยะทางสูงสุด
}
}
}
)