Bu rehber, Golang dilinden MongoDB'in temel işlemlerini tanıtıyor.

Not: Bu rehber, MongoDB tarafından sağlanan resmi Go dil sürücü paketini kullanır.

Önkoşul Rehberleri

Not: MongoDB hakkında bilgi sahibi değilseniz önce MongoDB bilgisini inceleyin. Golang rehberi ilgili bilgileri tekrar etmeyecektir.

Temel Gereksinimler

  • Go 1.10 veya daha yüksek
  • MongoDB 2.6 veya daha yüksek

Bağımlılıkları Yükle

go get go.mongodb.org/mongo-driver/mongo

MongoDB'ye Bağlan

import (
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

// MongoDB bağlantı adresi
uri := "mongodb://localhost:27017"
// Zaman aşımını ayarlayabilirsiniz
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

// MongoDB'ye bağlan
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))

Connect fonksiyonu gorutiniyi bloklamaz. Yani, Connect yöntemini çağırdıktan sonra doğrudan MongoDB'yi kullanmak, MongoDB'nin başarılı bir şekilde bağlanmamış olması nedeniyle hata almanıza neden olabilir. Bağlantının başarılı bir şekilde yapıldığını kontrol etmek için Ping yöntemini kullanabilirsiniz.

// MongoDB'ye ping atın, başarılı bir şekilde bağlandıysa hata dönmeyecektir
err = client.Ping(ctx, readpref.Primary())

MongoDB Bağlantı Adresi

MongoDB bağlantı adresi, sunucu adresi, port numarası, hesap ve şifre gibi önemli bilgileri içerir. Formatı aşağıdaki gibidir:

mongodb://[kullanıcıadı:şifre@]host1[:port1][,...hostN[:portN]][/[varsayılanauthdb][?seçenekler]]

Örnek:

// Varsayılan kullanıcı adı ve şifreyle localhost:27017 adresine bağlan
mongodb://localhost:27017

// Hesap=root, şifre=123456 olan localhost:27017 adresine bağlan, varsayılan veritabanına=admin
mongodb://root:123456@localhost:27017/admin

Bağlantı Kaynaklarını Serbest Bırak

Eğer bağlantı artık gerekli değilse, bağlantı kaynaklarını el ile serbest bırakmanız gerekir.

defer func() {
    if err = client.Disconnect(ctx); err != nil {
        panic(err)
    }
}()

Koleksiyon Örneği Al

MongoDB'yi Golang'da işlemek için öncelikle koleksiyon örneğini almanız gerekir, ardından koleksiyon örneğinde CRUD işlemleri yapabilirsiniz.

// Veritabanı adını Database ile, koleksiyon adını Collection ile ayarlayın
collection := client.Database("testing").Collection("numbers")

Not: MongoDB'nin özelliklerine göre, veritabanı ve koleksiyonu önceden oluşturmak zorunlu değildir. Veri ilk yazıldığında otomatik olarak oluşturulur.

Belge Ekleme

Veriyi InsertOne fonksiyonunu kullanarak ekleyin.

// İstek zaman aşımını belirlemek için yaygın olarak kullanılan Bağlam nesnesi, aynı zamanda daha önce oluşturulan bağlam nesnesini yeniden kullanabilirsiniz, tekrar tanımlamaya gerek yok
ctx, iptal = context.WithTimeout(context.Background(), 5*time.Second)
defer iptal()

// Belge ekleme, burada JSON belgesini tanımlamak için bson.D türünü kullanıyoruz, bson.D bir JSON dizisini temsil eder
res, err := koleksiyon.InsertOne(ctx, bson.D{{"ad", "pi"}, {"değer", 3.14159}})

// Yeni eklenen belgenin kimliğini alın
id := res.InsertedID

Aşağıdaki paketleri içe aktarmanız gerekir:

import (
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

Not: Golang'da, bson paketi JSON belge veri yapısını temsil etmek için kullanılır. Sonraki bölümler MongoDB veri depolama yapılarının Golang'da ifadesini detaylı bir şekilde açıklayacaktır.

package main
import (
	"context"
	"fmt"
	"time"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"go.mongodb.org/mongo-driver/mongo/readpref"
)
func main() {
	// MongoDB bağlantı adresini belirle
	uri := "mongodb://root:123456@localhost:27017/admin"
	ctx, iptal := context.WithTimeout(context.Background(), 10*time.Second)
	defer iptal()
	// MongoDB'ye bağlan
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
	if err != nil {
		panic(err)
	}

	defer func() {
		// Bağlantıyı gecikmeli olarak serbest bırak
		if err = client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()

	// MongoDB bağlantısının başarılı olup olmadığını kontrol et
	if err := client.Ping(ctx, readpref.Primary()); err != nil {
		panic(err)
	}
	fmt.Println("MongoDB başarılı bir şekilde bağlandı!")

	// numbers koleksiyonunu al
	koleksiyon := client.Database("testing").Collection("numbers")

	// Belge ekle
	res, err := koleksiyon.InsertOne(ctx, bson.D{{"ad", "pi"}, {"değer", 3.14159}})
	id := res.InsertedID
	fmt.Println("Yeni belge Kimliği=", id)
}