Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, Azure DocumentDB kümesine bağlanmak için bir Go konsol uygulamasının nasıl oluşturulacağı açıklanmaktadır. Geliştirme ortamınızı ayarlar, kimlik doğrulaması yapmak için Go için Azure SDK'sından alınan paketi kullanır azidentity ve veritabanındaki belgeler üzerinde ortak işlemler gerçekleştirirsiniz.
Prerequisites
Azure aboneliği
- Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun
Mevcut bir Azure DocumentDB kümesi
- Kümeniz yoksa yeni bir küme oluşturun
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell'i kullanmaya başlama.
CLI referans komutlarını yerel olarak çalıştırmayı tercih ediyorsanız, Azure CLI'yi yükleyin. Windows veya macOS üzerinde çalışıyorsanız, Azure CLI'yi bir Docker konteynerinde çalıştırmayı düşünün. Daha fazla bilgi için Azure CLI'nin bir Docker konteynerında nasıl çalıştırılacağını inceleyin.
Yerel bir kurulum kullanıyorsanız, az login komutunu kullanarak Azure CLI'ye giriş yapın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'da kimlik doğrulaması.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma ve yönetme.
Yüklü olan sürümü ve bağımlı kütüphaneleri bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
Kimlik verilen
rootrolünüzle küme için yapılandırılan Microsoft Entra kimlik doğrulaması.- Microsoft Entra kimlik doğrulamasını etkinleştirmek için yapılandırma kılavuzunu gözden geçirin.
Go'nun en son sürümü.
Konsol uygulamanızı yapılandırma
Ardından, yeni bir konsol uygulaması projesi oluşturun ve kümenizde kimlik doğrulaması yapmak için gerekli kitaplıkları içeri aktarın.
komutunu kullanarak
go mod initprojeniz için yeni bir Go modülü oluşturun.go mod init cosmicworksazidentityMicrosoft Entra Id ile kimlik doğrulamasını işlemek için paketi yükleyin.go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentitymongoPaketi yükleyin ve kümenizle etkileşime geçin.go get -u go.mongodb.org/mongo-driver/v2/mongoProje dizininizde adlı
main.goyeni bir dosya oluşturun.touch main.go
Kümeye bağlanma
Şimdi kitaplığını Azure.IdentityTokenCredential kullanarak kümenize bağlanmak için bir kullanın. Resmi MongoDB sürücüsünün, kümeye bağlanırken kullanılmak üzere Microsoft Entra'dan belirteçleri almak için uygulanması gereken özel bir arabirimi vardır.
Dosyanızın
main.goen üstündeki gerekli paketleri içeri aktararak başlayın.import ( "context" "crypto/tls" "encoding/json" "fmt" "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" )Uygulamanız genelinde kullanılan bir arka plan bağlamı oluşturun.
ctx := context.Background()Microsoft Entra ID ile kimlik doğrulaması yapmak için kullanılan bir
DefaultAzureCredentialörneği oluşturun.credential, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { panic(err) }MongoDB sürücüsünün kimlik doğrulaması yapması gerektiğinde erişim belirteçleri alan bir geri çağırma işlevi oluşturun.
azureIdentityTokenCallback := func(_ context.Context, _ *options.OIDCArgs) (*options.OIDCCredential, error) { accessToken, err := credential.GetToken(ctx, policy.TokenRequestOptions{ Scopes: []string{"https://ossrdbms-aad.database.windows.net/.default"}, }) if err != nil { return nil, err } return &options.OIDCCredential{ AccessToken: accessToken.Token, }, nil }Kümenizin adını ayarlayın ve bağlantı URI'sini oluşturun.
clusterName := "<azure-documentdb-cluster-name>" uri := fmt.Sprintf("mongodb+srv://%s.global.mongocluster.cosmos.azure.com/", clusterName)MongoDB istemcisi için kimlik doğrulama kimlik bilgilerini yapılandırın.
auth := options.Credential{ AuthMechanism: "MONGODB-OIDC", OIDCMachineCallback: azureIdentityTokenCallback, }Bağlantı parametreleri, aktarım katmanı güvenliği (TLS) yapılandırması ve kimlik doğrulaması ile istemci seçeneklerini ayarlayın.
clientOptions := options.Client(). ApplyURI(uri). SetConnectTimeout(2 * time.Minute). SetRetryWrites(true). SetTLSConfig(&tls.Config{}). SetAuth(auth)Yapılandırılan seçenekleri kullanarak bir MongoDB istemci örneği oluşturun.
client, err := mongo.Connect(clientOptions) if err != nil { panic(err) } fmt.Println("Client created")Uygulamanızdan çıkıldığında istemcinin bağlantısının düzgün şekilde kesildiğinden emin olmak için bir erteleme deyimi ekleyin.
defer func() { if err = client.Disconnect(ctx); err != nil { panic(err) } }()
Yaygın işlemler gerçekleştirme
Son olarak veritabanları, koleksiyonlar ve belgelerle ortak görevleri gerçekleştirmek için resmi kitaplığı kullanın. Burada, koleksiyonlarınızı ve öğelerinizi yönetmek için MongoDB veya DocumentDB ile etkileşimde bulunurken kullandığınız sınıfları ve yöntemleri kullanırsınız.
Adına göre veritabanınızın referansını alın.
database := client.Database("<database-name>") fmt.Println("Database pointer created")Veritabanı içindeki koleksiyonunuza bir referans alın.
collection := database.Collection("<collection-name>") fmt.Println("Collection pointer created")Belge yapınızı temsil eden bir Ürün yapısı tanımlayın.
type Product struct { ID string `bson:"_id"` Category string `bson:"category"` Name string `bson:"name"` Quantity int `bson:"quantity"` Price decimal128.Decimal128 `bson:"price"` Clearance bool `bson:"clearance"` }collection.ReplaceOneiçin yapılandırılan işlemi kullanarak belge oluşturun veya güncelleştirin.opts := options.Replace().SetUpsert(true) upsertFilter := bson.D{{Key: "_id", Value: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"}} priceDecimal, err := bson.ParseDecimal128("850.00") if err != nil { panic(err) } document := Product{ ID: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", Category: "gear-surf-surfboards", Name: "Yamba Surfboard", Quantity: 12, Price: priceDecimal, Clearance: false} result, err := collection.ReplaceOne(ctx, upsertFilter, document, opts) if err != nil { panic(err) } fmt.Printf("Documents upserted count:\t%d\n", result.UpsertedCount)Belirli bir belgeyi
collection.FindOnekullanarak ve_idilecategorybir filtre okuyun.readFilter := bson.D{{Key: "_id", Value: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"}, {Key: "category", Value: "gear-surf-surfboards"}} var target Product err = collection.FindOne(ctx, readFilter).Decode(&target) if err != nil { panic(err) } fmt.Printf("Read document name:\t%s\n", target.Name)Belirli bir
categoryeşleşen birden çok belgeyicollection.Findkullanarak sorgula.queryFilter := bson.D{{Key: "category", Value: "gear-surf-surfboards"}} cursor, err := collection.Find(ctx, queryFilter) if err != nil { panic(err) }İmleçten eşleşen tüm belgeleri alın.
var products []Product if err = cursor.All(ctx, &products); err != nil { panic(err) }Sorguda bulunan tüm ürünleri yineleyip görüntüleyin.
for _, product := range products { json, err := json.Marshal(product) if err != nil { panic(err) } fmt.Printf("Found document:\t%s\n", string(json)) }