บทนี้จะแนะนำฟังก์ชันการค้นหาทางภูมิศาสตร์ของ 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 // ระยะทางสูงสุด
          }
       }
   }
)