Bölüm Girişi
Bu bölüm, Golang MongoDB coğrafi sorgularını tanıtır. Konum bilgisi depolama ve mesafeye göre sorgu yapma da dahil olmak üzere.
Önkoşul Öğreticiler
İpucu: Eğer MongoDB sorgu sözdizimine aşina değilseniz, lütfen önce MongoDB öğreticisini okuyun. Golang'da MongoDB işletmek için kullanılan ifade sözdizimi aynıdır.
Test Verilerini Hazırlama
coll
koleksiyonuna coğrafi koordinatlar içeren veriler yazın. location
alanı mağazaların enlem ve boylam koordinatlarını depolar.
docs := []interface{}{
bson.D{
{"title", "Hainan Buharda Tavuk"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.240015, 39.899617}}
}},
},
bson.D{
{"title", "Guangdong Barbekü Domuz Eti"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.268854, 39.900276}}
}},
},
bson.D{
{"title", "Guangdong Kızarmış Kaz"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.264905, 39.902778}}
}},
},
bson.D{
{"title", "Şansi Gözleme"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.288938, 39.893164}}
}},
},
bson.D{
{"title", "Hangzhou Mantısı"},
{"location", bson.D{
{"type": "Point"},
{"coordinates": bson.A{116.286191, 39.910415}}
}},
}
}
result, err := coll.InsertMany(context.Background(), docs)
Mesafeye Göre Sorgulama
Mesafe sorgusu yapmak için $near
operatörünü kullanın. Varsayalım ki coll
koleksiyonu mağaza verilerini depolar ve location
alanı her mağazanın koordinatlarını saklar. Aşağıdaki kod, bana en yakın mağazayı sorgular (minimum mesafe 1000 metre, maksimum mesafe 5000 metre).
cursor, err := coll.Find(
context.Background(),
bson.D{{"location", bson.D{
{"$near": bson.D{
{"$geometry": bson.D{{"type":"Point"}, {"coordinates": bson.A{116.288938,39.893164}}}, // Şu anki koordinatlarım
{"$minDistance": 1000}, // Minimum mesafe
{"$maxDistance": 5000} // Maksimum mesafe
}}
}}}
)
Eşdeğer ifade:
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // Benim koordinatlarım
$minDistance: 1000, // Minimum mesafe
$maxDistance: 5000 // Maksimum mesafe
}
}
}
İfade, yerel MongoDB ifadesiyle aynıdır, tek farkı Golang'ın veri yapısını kullanarak tekrar açıklamaktır.