ใช้การค้นหาเชิงพื้นที่ในการดำเนินการที่เข้ากันได้กับ MongoDB เพื่อค้นหาเอกสารที่อยู่ภายในช่วงที่กำหนดจากลองจิจูดและละติจูดที่เฉพาะเจาะจง
ก่อนเริ่มต้น
ตรวจสอบว่าคุณมีสิทธิ์เข้าถึงฐานข้อมูลการดำเนินการที่เข้ากันได้กับ MongoDB ที่มีอยู่ หรือสร้างฐานข้อมูลและเชื่อมต่อกับฐานข้อมูลดังกล่าว
ตรวจสอบว่าคุณมีดัชนี 2dsphere อย่างน้อย 1 รายการ หรือสร้างดัชนี 2dsphere
ออบเจ็กต์ GeoJSON
หากต้องการเรียกใช้การค้นหาเชิงภูมิสารสนเทศกับช่องในคอลเล็กชัน ช่องที่คุณค้นหาต้องเป็นออบเจ็กต์ GeoJSON หรือ GeoPoint
เรียกใช้การค้นหาเชิงพื้นที่ทางภูมิศาสตร์
คุณสามารถทำการค้นหาเชิงพื้นที่ทางภูมิศาสตร์ได้โดยใช้โอเปอเรเตอร์ $near ซึ่งจะคำนวณระยะทางของจุดทางภูมิศาสตร์ที่สัมพันธ์กับจุดทางภูมิศาสตร์ภายในเอกสาร จากนั้นระบบจะจัดเรียงเอกสารเหล่านี้จากระยะทางที่ใกล้ที่สุดไปยังไกลที่สุดในผลการค้นหา นอกจากนี้ คุณยังลบล้างลำดับการจัดเรียงนี้ได้โดยกำหนดการจัดเรียงรองนอกเหนือจาก $natural ในการค้นหา โอเปอเรเตอร์ $near ต้องอยู่ในช่องเอกสารในตัวกรองการค้นหา และต้องมีช่อง GeoJSON $geometry
ในตัวอย่างต่อไปนี้ ระบบจะใช้โอเปอเรเตอร์ $near เพื่อคำนวณระยะทางระหว่างจุดทางภูมิศาสตร์ (-122.084, 37.4221) กับจุดทางภูมิศาสตร์ที่อยู่ในฟิลด์ location ของเอกสารทั้งหมดใน myCollection. ระบบจะแสดงผลเอกสารและจัดเรียงตามระยะทางที่ใกล้ที่สุดไปไกลที่สุดระหว่างจุด 2 จุด
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
นอกจากนี้ คุณยังใช้ช่อง $maxDistance และ $minDistance ที่ไม่บังคับเพื่อควบคุมระยะทางเป็นเมตรจากจุดที่ค้นหาได้ด้วย
ตัวอย่างต่อไปนี้แสดงการค้นหาที่เอกสารที่แสดงผลต้องอยู่ห่างจากจุด (-122.084, 37.4221) อย่างน้อย 500 เมตรและไม่เกิน 2,000 เมตร
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
หากดัชนีมีการแบ่งพาร์ติชัน คุณสามารถกรองตามพาร์ติชันได้โดยรวมพาร์ติชันไว้ในตัวกรองความเท่ากัน "and" ภายในการค้นหา
ตัวอย่างเช่น หากคุณมีพาร์ติชัน region และต้องการกรองผลการค้นหาตามภูมิภาค midwest คุณสามารถทำดังนี้
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
ค่าของพาร์ติชันต้องเป็นสตริง ตัวกรองพาร์ติชันต้องรวมกับคำค้นหาโดยใช้โอเปอเรเตอร์ $and
ข้อจำกัด
- ไม่สามารถใช้โอเปอเรเตอร์
$nearและโอเปอเรเตอร์$textในการค้นหาเดียวกันได้ $nearไม่สามารถซ้อนกันในคำสั่ง$orแบบหลายส่วนคำสั่ง เว้นแต่$nearจะเป็นนิพจน์เดียวในส่วนคำสั่ง$or- ใช้
$nearร่วมกับโอเปอเรเตอร์$notหรือ$norในการค้นหาไม่ได้ - ไม่รองรับ
$nearในการค้นหาการรวม