MongoDB: Go Driver ile NoSQL Veri Yönetimi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
183
Tepkime puanı
2
Puanları
18
MongoDB, esnek şema yapısıyla (BSON) Go'nun güçlü tip sistemi için harika bir eşleşmedir. Resmi MongoDB Go Driver, yüksek performanslı ve asenkron operasyonları destekleyen, modern Go standartlarına (Context, Struct Tags vb.) tam uyumlu bir kütüphanedir.

1. Bağlantı Kurulumu ve İstemci Yönetimi​

Go'da MongoDB bağlantısı kurarken mongo.Connect kullanılır. Bağlantı havuzunu (connection pool) verimli kullanmak için MongoClient nesnesini uygulama genelinde tek bir kez oluşturmak ve paylaşmak önemlidir.
Go

Kod:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
client, err := mongo.Connect(ctx, clientOptions)

// Bağlantıyı doğrula
err = client.Ping(ctx, nil)

2. Struct Tag'leri ile BSON Eşleme​

MongoDB verileri BSON (Binary JSON) formatında saklar. Go struct'larınızdaki alanların MongoDB'de nasıl görüneceğini belirlemek için bson etiketlerini kullanırız.
Go

Kod:
type Kullanici struct {
    ID    primitive.ObjectID `bson:"_id,omitempty"` // Otomatik ID yönetimi
    Ad    string             `bson:"ad"`
    Email string             `bson:"email"`
    Yas   int                `bson:"yas"`
}

3. Temel CRUD Operasyonları​

Go Driver, verileri yönetmek için tip güvenli metodlar sunar.

Veri Ekleme (Insert)​

Go

Kod:
collection := client.Database("testdb").Collection("kullanicilar")
yeniKullanici := Kullanici{Ad: "Deniz", Yas: 30}
res, err := collection.InsertOne(ctx, yeniKullanici)

Veri Sorgulama (Query)​

Sorgu yaparken bson.M (Map) veya bson.D (Document) kullanılır. bson.D sıralı bir yapı olduğu için kompleks sorgularda daha güvenlidir.
Go

Kod:
filter := bson.M{"ad": "Deniz"}
var sonuc Kullanici
err := collection.FindOne(ctx, filter).Decode(&sonuc)

4. Aggregation Framework: Veri Analizi​

MongoDB'nin en güçlü yanlarından biri olan Aggregation Pipeline, Go içinde bir slice ([]bson.D) olarak tanımlanır. Bu, büyük veri setleri üzerinde filtreleme, gruplama ve dönüştürme işlemlerini sunucu tarafında yapmanızı sağlar.
Aşama (Stage)Açıklama
$matchVerileri belirli kriterlere göre filtreler.
$groupBelirli bir alana göre verileri gruplar (Örn: Toplam satış).
$projectSadece ihtiyacınız olan alanları seçer.
$sortSonuçları sıralar.

5. Performans ve Güvenlik İpuçları​

  • Context Kullanımı: Tüm veritabanı işlemlerinde context.Context kullanarak zaman aşımı (timeout) kontrolü yapın. Bu, servisinizin asılı kalmasını (hanging) önler.
  • Indexing: Sık sorgulanan alanlar için Go tarafında veya veritabanında mutlaka index oluşturun.
  • Defer Disconnect: Uygulama kapanırken client.Disconnect(ctx) çağrısı yaparak kaynakları temizleyin (Graceful Shutdown).

Özet​

MongoDB ve Go birlikteliği, özellikle hızlı değişen gereksinimleri olan web servisleri ve mikroservisler için idealdir. Go Driver, BSON ve Struct arasındaki dönüşümleri otomatikleştirerek geliştirme sürecini hızlandırır.
 
Geri
Üst