Hızlı Başlangıç: MongoDB sürücüsüyle .NET için MongoDB için Azure Cosmos DB

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Azure Cosmos DB kaynağınızda veritabanları, koleksiyonlar ve belgeler oluşturmak için MongoDB'yi kullanmaya başlayın. Azure Geliştirici CLI'sını kullanarak ortamınıza en düşük çözümü dağıtmak için bu adımları izleyin.

MongoDB için API başvuru belgeleri | MongoDB Paketi (NuGet) paketleri/Microsoft.Azure.Cosmos) | Azure Geliştirici CLI'sı

Önkoşullar

Ayarlama

Bu projenin geliştirme kapsayıcısını ortamınıza dağıtın. Ardından Azure Geliştirici CLI'sını (azd) kullanarak MongoDB için Azure Cosmos DB hesabı oluşturun ve kapsayıcılı örnek bir uygulama dağıtın. Örnek uygulama örnek verileri yönetmek, oluşturmak, okumak ve sorgulamak için istemci kitaplığını kullanır.

GitHub Codespaces'ta aç

Geliştirme Kapsayıcısında Aç

Önemli

GitHub hesapları, hiçbir ücret ödemeden depolama ve çekirdek saat yetkilendirmesi içerir. Daha fazla bilgi için bkz . GitHub hesapları için dahil edilen depolama ve çekirdek saatler.

  1. Projenin kök dizininde bir terminal açın.

  2. kullanarak azd auth loginAzure Geliştirici CLI'sinde kimlik doğrulaması Tercih ettiğiniz Azure kimlik bilgilerini kullanarak CLI'da kimlik doğrulaması yapmak için araç tarafından belirtilen adımları izleyin.

    azd auth login
    
  3. Projeyi başlatmak için kullanın azd init .

    azd init
    
  4. Başlatma sırasında benzersiz bir ortam adı yapılandırın.

    İpucu

    Ortam adı, hedef kaynak grubu adı olarak da kullanılır. Bu hızlı başlangıç için kullanmayı msdocs-cosmos-db-göz önünde bulundurun.

  5. Kullanarak azd upAzure Cosmos DB hesabını dağıtın. Bicep şablonları ayrıca örnek bir web uygulaması dağıtır.

    azd up
    
  6. Sağlama işlemi sırasında aboneliğinizi ve istediğiniz konumu seçin. Sağlama işleminin tamamlanmasını bekleyin. İşlem yaklaşık beş dakika sürebilir.

  7. Azure kaynaklarınızın sağlanması tamamlandıktan sonra, çalışan web uygulamasının URL'si çıktıya eklenir.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Tarayıcıda web uygulamanıza gitmek için konsoldaki URL'yi kullanın. Çalışan uygulamanın çıkışını gözlemleyin.

    Çalışan web uygulamasının ekran görüntüsü.


İstemci kitaplığını yükleme

İstemci kitaplığı NuGet aracılığıyla paket olarak Microsoft.Azure.Cosmos kullanılabilir.

  1. Bir terminal açın ve klasöre /src/web gidin.

    cd ./src/web
    
  2. Henüz yüklü değilse, kullanarak paketini dotnet add packageyükleyinMongoDb.Driver.

    dotnet add package MongoDb.Driver
    
  3. Ayrıca, henüz yüklü değilse paketi yükleyin Azure.Identity .

    dotnet add package Azure.Identity
    

Nesne modeli

Uygulamayı oluşturmaya başlamadan önce Azure Cosmos DB'deki kaynak hiyerarşisini inceleyelim. Azure Cosmos DB'de kaynak oluşturmak ve kaynaklara erişmek için kullanılan belirli bir nesne modeli vardır. Azure Cosmos DB, hesaplar, veritabanları, koleksiyonlar ve belgelerden oluşan bir hiyerarşide kaynaklar oluşturur.

Hesaplar, veritabanları, koleksiyonlar ve belgeler de dahil olmak üzere Azure Cosmos DB hiyerarşisinin diyagramı.

En üstte bir Azure Cosmos DB hesabını gösteren hiyerarşik diyagram. Hesapta iki alt veritabanı parçası vardır. Veritabanı parçalarından biri iki alt koleksiyon parçası içerir. Diğer veritabanı parçası tek bir alt koleksiyon parçası içerir. Bu tek koleksiyon parçası üç alt belge parçasına sahiptir.

Bu kaynaklarla etkileşime geçmek için aşağıdaki MongoDB sınıflarını kullanacaksınız:

  • MongoClient - Bu sınıf, Azure Cosmos DB'de MongoDB için API katmanı için istemci tarafı mantıksal gösterimi sağlar. İstemci nesnesi, hizmette istekleri yapılandırmak ve yürütmek için kullanılır.
  • MongoDatabase - Bu sınıf, hizmette henüz var olabilen veya bulunmayabilecek bir veritabanına başvurudur. Veritabanına erişmeye veya ona karşı bir işlem gerçekleştirmeye çalıştığınızda veritabanı sunucu tarafında doğrulanır.
  • Collection - Bu sınıf, hizmette henüz mevcut olmayan bir koleksiyona başvurudur. Koleksiyon, onunla çalışmaya çalıştığınızda sunucu tarafında doğrulanır.

Kod örnekleri

Bu makalede gösterildiği gibi örnek kod adlı bir koleksiyonla adlı adventureworksproductsbir veritabanı oluşturur. Koleksiyon products ad, kategori, miktar ve satış göstergesi gibi ürün ayrıntılarını içerecek şekilde tasarlanmıştır. Her ürün benzersiz bir tanımlayıcı da içerir.

İstemcinin kimliğini doğrulama

Proje dizininden Program.cs dosyasını açın. Düzenleyicinizde için MongoDB.Driverbir using yönergesi ekleyin.

using MongoDB.Driver;

Oluşturucuyu MongoClient kullanarak sınıfının yeni bir örneğini tanımlayın ve Environment.GetEnvironmentVariable daha önce ayarladığınız bağlantı dizesi okuyun.

// New instance of CosmosClient class
var client = new MongoClient(Environment.GetEnvironmentVariable("MONGO_CONNECTION"));

veritabanı oluşturun

MongoClient.GetDatabase Henüz yoksa yeni bir veritabanı oluşturmak için yöntemini kullanın. Bu yöntem var olan veya yeni oluşturulan veritabanına bir başvuru döndürür.

// Database reference with creation if it does not already exist
var db = client.GetDatabase("adventure");

Koleksiyon oluşturma

MongoDatabase.GetCollection henüz yoksa yeni bir koleksiyon oluşturur ve koleksiyona bir başvuru döndürür.

// Container reference with creation if it does not alredy exist
var _products = db.GetCollection<Product>("products");

Öğe oluşturma

Koleksiyonda yeni öğe oluşturmanın en kolay yolu, JSON'da seri hale getirmek istediğiniz tüm üyeleri içeren bir C# sınıfı veya kayıt türü oluşturmaktır. Bu örnekte, C# kaydı benzersiz bir tanımlayıcıya, bölüm anahtarı için bir kategori alanına ve ek ad, miktar ve satış alanlarına sahiptir.

public record Product(
    string Id,
    string Category,
    string Name,
    int Quantity,
    bool Sale
);

komutunu çağırarak IMongoCollection<TDocument>.InsertOnekaydı kullanarak Product koleksiyonda bir öğe oluşturun.

// Create new object and upsert (create or replace) to container
_products.InsertOne(new Product(
    Guid.NewGuid().ToString(),
    "gear-surf-surfboards",
    "Yamba Surfboard", 
    12, 
    false
));

Öğe alma

Azure Cosmos DB'de Linq kullanarak sorgu oluşturarak öğeleri alabilirsiniz. SDK'da sonuçları filtrelemek için bir C# ifadesi çağırın IMongoCollection.FindAsync<> ve geçirin.

// Read a single item from container
var product = (await _products.FindAsync(p => p.Name.Contains("Yamba"))).FirstOrDefault();
Console.WriteLine("Single product:");
Console.WriteLine(product.Name);

Sorgu öğeleri

Öğe ekledikten sonra, koleksiyonu olarak değerlendirerek belirli bir filtreyle eşleşen tüm öğeleri almak için bir IQueryablesorgu çalıştırabilirsiniz. Bu örnekte, ürünleri kategoriye göre filtrelemek için bir ifade kullanılır. çağrısı AsQueryable yapıldıktan sonra bir dizi filtrelenmiş öğeyi almak için çağrısında MongoQueryable.Where bulunun.

// Read multiple items from container
_products.InsertOne(new Product(
    Guid.NewGuid().ToString(),
    "gear-surf-surfboards",
    "Sand Surfboard",
    4,
    false
));

var products = _products.AsQueryable().Where(p => p.Category == "gear-surf-surfboards");

Console.WriteLine("Multiple products:");
foreach (var prod in products)
{
    Console.WriteLine(prod.Name);
}

Kodu çalıştırma

Bu uygulama bir Azure Cosmos DB MongoDb API veritabanı ve koleksiyonu oluşturur. Örnek daha sonra bir öğe oluşturur ve tam olarak aynı öğeyi yeniden okur. Son olarak, örnek ikinci bir öğe oluşturur ve birden çok öğe döndürmesi gereken bir sorgu gerçekleştirir. Her adımda örnek, konsola gerçekleştirdiği adımlarla ilgili meta veriler gönderir.

Uygulamayı çalıştırmak için bir terminal kullanarak uygulama dizinine gidin ve uygulamayı çalıştırın.

dotnet run

Uygulamanın çıkışı şu örneğe benzer olmalıdır:

Single product name: 
Yamba Surfboard
Multiple products:
Yamba Surfboard
Sand Surfboard

Kaynakları temizleme

MongoDB için Azure Cosmos DB hesabına artık ihtiyacınız kalmadığında ilgili kaynak grubunu silebilirsiniz.

az group delete Kaynak grubunu silmek için komutunu kullanın.

az group delete --name $resourceGroupName