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.
Go
Go
Go
1. Bağlantı Kurulumu ve İstemci Yönetimi
Go'da MongoDB bağlantısı kurarkenmongo.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çinbson 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 yaparkenbson.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 |
$match | Verileri belirli kriterlere göre filtreler. |
$group | Belirli bir alana göre verileri gruplar (Örn: Toplam satış). |
$project | Sadece ihtiyacınız olan alanları seçer. |
$sort | Sonuç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).