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)
}