Bu bölüm, MongoDB'nin jeo-mekansal sorgusunu tanıtır ve geometrik kesişme ve içerme sorgularını destekler.
Uygulama senaryoları:
- Haritada bir daire çizip daire içindeki verileri sorgulayın.
Önkoşul Öğretici
MongoDB için Jeo-Mekansal Veri Depolama Biçimleri
Mesafeye dayalı veri sorgulamak için gereksinimler şunlardır:
- Her belge verisi, örneğin: konum alanı bir mağazanın koordinatlarını saklar, için bir alan içermelidir.
- 2dsphere veya 2d mekansal indeks oluşturun.
$geoWithin Operatörü
Genellikle belirli bir geometrik aralık içinde bulunan koordinat noktalarını sorgulamak için kullanılır, örneğin: harita üzerinde çizerek evleri ararken, harita üzerinde bir alan çizin ve bu alandaki evleri sorgulayın.
Sözdizim biçimi:
{
<konum alanı>: { // Sorgu alanı
$geoWithin: {
$geometry: {
type: , // Yalnızca Polygon veya MultiPolygon'u destekler.
coordinates: [ <koordinatlar> ] // Jeometrik koordinat noktalarının koleksiyonu
}
}
}
}
Örnek:
db.places.find(
{
loc: { // loc alanı koordinat verilerini saklar
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Bu geometrik alandaki verileri bul
}
}
}
}
)
places koleksiyonundaki belge verilerini belirtilen geometrik alandaki için sorgulayın.
$geoIntersects Operatörü
$geoWithin'den farkı, $geoIntersects'ün iki geometri arasında kesişimin olup olmadığını belirlemek için kullanılmasıdır.
Biçim:
{
<konum alanı>: { // Geometrik koordinat noktalarını saklayan alan
$geoIntersects: {
$geometry: {
type: "<geojson nesne tipi>" , // Geometrik tip
coordinates: [ <koordinatlar> ] // Geometrik koordinat noktalarının koleksiyonu, bu geometri ile kesişen verileri sorgulayın
}
}
}
}
Örnek:
db.places.find(
{
loc: { // loc alanı, bir geometrik şekil olan alan verisini saklar
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Bu geometri ile kesişen verileri sorgulayın
]
}
}
}
}
)