از پُرسمانهای زمینمکانی در عملیات سازگار با MongoDB برای پُرسمان اسنادی که در محدوده خاصی از طول و عرض جغرافیایی مشخصی وجود دارند استفاده کنید.
قبل از شروع
مطمئن شوید که به پایگاه داده عملیات سازگار با MongoDB موجود دسترسی دارید، یا پایگاه دادهای ایجاد کنید و به آن متصل شوید.
مطمئن شوید حداقل یک نمایه 2dsphere دارید، یا نمایه 2dsphere ایجاد کنید.
اشیاء GeoJSON
برای اجرای پُرسمان زمینمکانی در فیلدهای مجموعهتان، فیلدهایی که پُرسمان میکنید باید اشیاء GeoJSON یا GeoPoints باشند.
اجرای پُرسمان زمینمکانی
میتوانید بااستفاده از اپراتور $near، که فاصله یک نقطه جغرافیایی را نسبت به نقاط جغرافیایی درون اسناد محاسبه میکند، یک پُرسمان زمینمکانی انجام دهید. سپس این اسناد از نزدیکترین به دورترین فاصله در نتایج پُرسمان مرتب میشوند. همچنین میتوانید با تعریف کردن مرتبسازی ثانویه، بهغیراز $natural، در پُرسمانتان این ترتیب مرتبسازی را لغو کنید. اپراتور $near باید در فیلد سند در فیلتر پُرسمان وجود داشته باشد و باید حاوی فیلد GeoJSON $geometry باشد.
در مثال زیر، از عملگر $near برای محاسبه فاصله بین نقطه جغرافیایی (-122.084, 37.4221) و نقاط جغرافیایی واقع در فیلد location همه اسناد در myCollection. استفاده میشود. اسناد برگردانده میشوند و براساس نزدیکترین تا دورترین فاصله بین دو نقطه مرتب میشوند.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
همچنین میتوانید از فیلدهای اختیاری $maxDistance و $minDistance
برای کنترل فاصله برحسب متر از نقطه پُرسمانتان استفاده کنید.
مثال زیر پُرسمانی را نشان میدهد که در آن اسناد برگرداندهشده باید حداقل
۵۰۰ متر و حداکثر ۲۰۰۰ متر از نقطه (-122.084, 37.4221) فاصله داشته باشند:
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در پُرسمانهای انبوهشی پشتیبانی نمیشود.