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.