Belirli bir boylam ve enlemden belirli bir mesafede bulunan belgeleri sorgulamak için MongoDB uyumlu işlemlerde coğrafi sorguları kullanın.
Başlamadan önce
Mevcut bir MongoDB uyumlu operasyon veritabanına erişiminiz olduğundan emin olun veya veritabanı oluşturup bu veritabanına bağlanın.
En az bir 2dsphere dizininiz olduğundan emin olun veya 2dsphere dizini oluşturun.
GeoJSON nesneleri
Koleksiyonunuzdaki alanlarda coğrafi sorgu çalıştırmak için sorguladığınız alanların GeoJSON nesneleri veya GeoPoint'ler olması gerekir.
Coğrafi sorgu çalıştırma
Belgelerdeki coğrafi noktalara göre bir coğrafi noktanın mesafesini hesaplayan $near operatörünü kullanarak coğrafi sorgu gerçekleştirebilirsiniz. Bu dokümanlar daha sonra sorgu sonuçlarında en yakından en uzağa doğru sıralanır. Sorgunuzda $natural dışında ikincil bir sıralama tanımlayarak bu sıralama ölçütünü geçersiz kılabilirsiniz. $near operatörü, sorgu filtresindeki bir belge alanında bulunmalı ve $geometry GeoJSON alanı içermelidir.
Aşağıdaki örnekte, (-122.084, 37.4221) coğrafi noktası ile myCollection. içindeki tüm dokümanların location alanında bulunan coğrafi noktalar arasındaki mesafeyi hesaplamak için $near operatörü kullanılmıştır. Dokümanlar, iki nokta arasındaki en yakın mesafeden en uzak mesafeye doğru sıralanarak döndürülür.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
Sorgunuzun yapıldığı noktadan itibaren mesafeyi metre cinsinden kontrol etmek için isteğe bağlı $maxDistance ve $minDistance alanlarını da kullanabilirsiniz.
Aşağıdaki örnekte, döndürülen belgelerin (-122.084, 37.4221) noktasından en az 500 metre ve en fazla 2.000 metre uzakta olması gereken bir sorgu gösterilmektedir:
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
Dizininiz bölümlendirilmişse sorgunuzdaki bir "ve" eşitlik filtresine bölümü dahil ederek bölüme göre filtreleme yapabilirsiniz.
Örneğin, region bölümünüz varsa ve sorgu sonuçlarınızı midwest bölgesine göre filtrelemek istiyorsanız aşağıdakileri yapabilirsiniz:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
Bölümünüzün değeri bir dize olmalıdır. Bölüm filtreniz, arama sorgunuza $and operatörüyle eklenmelidir.
Sınırlamalar
$nearoperatörleri ve$textoperatörleri aynı sorguda kullanılamaz.$near,$orifadesindeki tek ifade olmadığı sürece çok yan tümceli bir$orifadesine yerleştirilemez.$near$near, bir sorguda$notveya$noroperatörleriyle birlikte kullanılamaz.$near, toplama sorgularında desteklenmez.