Belirli bir boylam ve enlemden belirli bir aralıkta bulunan dokümanları sorgulamak için MongoDB ile uyumlu işlemlerde coğrafi sorgular kullanın.
Başlamadan önce
Mevcut bir MongoDB uyumlu işlemler veritabanına erişiminiz olduğundan veya bir veritabanı oluşturup bu veritabanına bağlandığınızdan emin olun.
En az bir 2dsphere dizininiz olduğundan emin olun veya 2dsphere dizini oluşturun.
GeoJSON nesneleri
Koleksiyonunuzdaki alanlara karşı coğrafi sorgu çalıştırmak için sorguladığınız alanlar GeoJSON nesneleri veya GeoPoint'ler olmalıdır.
Coğrafi sorgu çalıştırma
$near operatörünü kullanarak coğrafi bir sorgu gerçekleştirebilirsiniz. Bu operatör, bir coğrafi noktanın belgelerdeki coğrafi noktalara göre mesafesini hesaplar. Bu belgeler 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 düzenini geçersiz de kılabilirsiniz. $near operatörü, sorgu filtresindeki bir belge alanında bulunmalı ve $geometry GeoJSON alanı içermelidir.
Aşağıdaki örnekte, $near operatörü, (-122.084, 37.4221) coğrafi noktası ile myCollection. içindeki tüm belgelerin location alanında bulunan coğrafi noktalar arasındaki mesafeyi hesaplamak için kullanılır. Belgeler, iki nokta arasındaki en yakın mesafeden en uzak mesafeye göre sıralanarak döndürülür.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
Sorgunuzun noktasından 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 dokümanların (-122.084, 37.4221) noktasına en az 500 metre ve en fazla 2.000 metre uzaklıkta 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 sorgunuzda bölümü bir "ve" eşitlik filtresine 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 şunları 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, $and operatörüyle arama sorgunuza birleştirilmelidir.
Sınırlamalar
$nearoperatörleri ve$textoperatörleri aynı sorguda kullanılamaz.$near,$orifadesindeki tek ifade olmadığı sürece çok maddeli bir$orifadesine yerleştirilemez.$near$near, bir sorguda$notveya$noroperatörleriyle birlikte kullanılamaz.$near, toplama sorgularında desteklenmez.