این فصل با معرفی کوئریهای جغرافیایی MongoDB شروع میشود که پشتیبانی از جستجوهای هندسی تقاطع و حاویت را فراهم میکند.
سناریوهای کاربرد:
- ترسیم یک دایره روی نقشه و جستجوی دادهها درون دایره.
آموزش پیشنیاز
فرمتهای ذخیره سازی دادههای جغرافیایی برای MongoDB
پیشنیازهای جستجوی داده بر اساس فاصله عبارتند از:
- هر داده سند شامل یک فیلد برای ذخیره دادههای مختصات میباشد، به عنوان مثال: فیلد مکان دادههای مختصات یک فروشگاه را ذخیره میکند.
- ایجاد یک فضای فیزیکی 2dsphere یا 2d فهرست فضایی.
عملگر $geoWithin
این عموما برای جستجوی نقاط مختصات موجود در محدوده هندسی مشخص استفاده میشود، به عنوان مثال: هنگام جستجوی خانهها با ترسیم روی نقشه، یک منطقه روی نقشه رسم کرده و خانههای موجود در آن منطقه را جستجو کنید.
قالب نحو:
{
<فیلد مکان>: { // فیلد جستجو
$geoWithin: {
$geometry: {
type: , // تنها پشتیبانی از چندضلعی یا چندضلعی چندگانه است.
coordinates: [ <مختصات> ] // مجموعهای از نقاط مختصات هندسی
}
}
}
}
مثال:
db.places.find(
{
loc: { // فیلد loc دادهی مختصات را ذخیره میکند
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // دادههای موجود در این محدوده هندسی را پیدا کنید
}
}
}
}
)
جستجوی داده سند در داخل منطقه هندسی مشخص شده در مجموعه places.
عملگر $geoIntersects
تفاوت این عمل با $geoWithin این است که از $geoIntersects برای تعیین وجود تلاقی بین دو هندسه استفاده میشود.
قالب:
{
<فیلد مکان>: { // فیلد ذخیره نقاط مختصات هندسی
$geoIntersects: {
$geometry: {
type: "<نوع شی geojson>" , // نوع هندسی
coordinates: [ <مختصات> ] // مجموعهای از نقاط مختصات هندسی، دادهها را با تلاقی با این هندسه جستجو کنید
}
}
}
}
مثال:
db.places.find(
{
loc: { // فیلد loc دادههای منطقه را ذخیره میکند، که یک شکل هندسی میباشد
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // دادهها با تلاقی با این هندسه را جستجو کنید
]
}
}
}
}
)