Mulai cepat: Azure Cosmos DB untuk MongoDB untuk .NET dengan driver MongoDB

BERLAKU UNTUK: MongoDB

Mulai menggunakan MongoDB untuk membuat database, koleksi, dan dokumen dalam sumber daya Azure Cosmos DB Anda. Ikuti langkah-langkah ini untuk menyebarkan solusi minimal ke lingkungan Anda menggunakan Azure Developer CLI.

API untuk dokumentasi | referensi MongoDB Paket MongoDB (NuGet) paket/Microsoft.Azure.Cosmos) | Azure Developer CLI

Prasyarat

Menyiapkan

Sebarkan kontainer pengembangan proyek ini ke lingkungan Anda. Kemudian, gunakan Azure Developer CLI (azd) untuk membuat akun Azure Cosmos DB for MongoDB dan menyebarkan aplikasi sampel dalam kontainer. Aplikasi sampel menggunakan pustaka klien untuk mengelola, membuat, membaca, dan mengkueri data sampel.

Buka di GitHub Codespaces

Buka di Kontainer Dev

Penting

Akun GitHub mencakup pemberian izin penyimpanan dan jam inti tanpa biaya. Untuk informasi selengkapnya, lihat penyimpanan dan jam inti yang disertakan untuk akun GitHub.

  1. Buka terminal di direktori akar proyek.

  2. Autentikasi ke Azure Developer CLI menggunakan azd auth login. Ikuti langkah-langkah yang ditentukan oleh alat untuk mengautentikasi ke CLI menggunakan kredensial Azure pilihan Anda.

    azd auth login
    
  3. Gunakan azd init untuk menginisialisasi proyek.

    azd init
    
  4. Selama inisialisasi, konfigurasikan nama lingkungan yang unik.

    Tip

    Nama lingkungan juga akan digunakan sebagai nama grup sumber daya target. Untuk mulai cepat ini, pertimbangkan untuk menggunakan msdocs-cosmos-db-.

  5. Sebarkan akun Azure Cosmos DB menggunakan azd up. Templat Bicep juga menyebarkan aplikasi web sampel.

    azd up
    
  6. Selama proses provisi, pilih langganan dan lokasi yang Anda inginkan. Tunggu hingga proses provisi selesai. Prosesnya dapat memakan waktu sekitar lima menit.

  7. Setelah provisi sumber daya Azure Anda selesai, URL ke aplikasi web yang sedang berjalan disertakan dalam output.

    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. Gunakan URL di konsol untuk menavigasi ke aplikasi web Anda di browser. Amati output aplikasi yang sedang berjalan.

    Cuplikan layar aplikasi web yang sedang berjalan.


Memasang pustaka klien

Pustaka klien tersedia melalui NuGet, sebagai Microsoft.Azure.Cosmos paket.

  1. Buka terminal dan navigasi ke /src/web folder .

    cd ./src/web
    
  2. Jika belum diinstal, instal MongoDb.Driver paket menggunakan dotnet add package.

    dotnet add package MongoDb.Driver
    
  3. Selain itu Azure.Identity , instal paket jika belum diinstal.

    dotnet add package Azure.Identity
    

Model objek

Sebelum Anda mulai membangun aplikasi, mari kita lihat hierarki sumber daya di Azure Cosmos DB. Azure Cosmos DB memiliki model objek tertentu yang digunakan untuk membuat dan mengakses sumber daya. Azure Cosmos DB membuat sumber daya dalam hierarki yang terdiri dari akun, database, koleksi, dan dokumen.

Diagram hierarki Azure Cosmos DB termasuk akun, database, koleksi dan dokumen.

Diagram hierarki memperlihatkan akun Azure Cosmos DB di bagian atas. Akun ini memiliki dua pecahan database anak. Salah satu pecahan database mencakup dua pecahan koleksi anak. Shard database lainnya menyertakan pecahan koleksi anak tunggal. Pecahan koleksi tunggal itu memiliki tiga shard dokumen anak.

Anda akan menggunakan kelas MongoDB berikut untuk berinteraksi dengan sumber daya ini:

  • MongoClient - Kelas ini menyediakan representasi logis sisi klien untuk lapisan API untuk MongoDB di Azure Cosmos DB. Klien ini digunakan untuk mengonfigurasi dan menjalankan permintaan terhadap layanan.
  • MongoDatabase - Kelas ini adalah referensi ke database yang mungkin, atau mungkin belum ada dalam layanan. Database divalidasi di sisi server saat Anda mencoba mengaksesnya atau melakukan operasi terhadapnya.
  • Collection - Kelas ini adalah referensi ke koleksi yang mungkin juga belum ada dalam layanan. Koleksi divalidasi di sisi server saat Anda mencoba untuk menggunakannya.

Contoh kode

Kode sampel yang ditunjukkan dalam artikel ini membuat database bernama adventureworks dengan koleksi bernama products. Koleksi products dirancang untuk berisi detail produk seperti nama, kategori, kuantitas, dan indikator penjualan. Setiap produk juga berisi pengidentifikasi unik.

Mengautentikasi klien

Dari direktori proyek, buka file Program.cs. Di editor Anda, tambahkan arahan penggunaan untuk MongoDB.Driver.

using MongoDB.Driver;

Tentukan instans baru kelas MongoClient menggunakan konstruktor dan Environment.GetEnvironmentVariable untuk membaca string koneksi yang Anda tentukan sebelumnya.

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

Membuat database

Gunakan metode MongoClient.GetDatabase untuk membuat database baru jika belum ada. Metode ini akan mengembalikan referensi ke database yang sudah ada atau yang baru dibuat.

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

Membuat kumpulan

MongoDatabase.GetCollection akan membuat koleksi baru jika belum ada dan akan mengembalikan referensi ke koleksi.

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

Membuat item

Cara termudah untuk membuat item baru dalam koleksi adalah dengan membuat jenis kelas atau baris C# dengan semua anggota yang ingin Anda serialisasikan ke JSON. Dalam contoh ini, catatan C# memiliki pengidentifikasi unik, bidang kategori untuk kunci partisi, dan bidang name, quantity, dan sale tambahan.

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

Buat item dalam koleksi menggunakan baris Product dengan memanggil IMongoCollection<TDocument>.InsertOne.

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

Mendapatkan item

Di Azure Cosmos DB, Anda dapat mengambil item dengan menyusun kueri menggunakan Linq. Di SDK, lakukan dengan memanggil IMongoCollection.FindAsync<> dan berikan ekspresi C# untuk memfilter hasilnya.

// 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);

Buat kueri item

Setelah menyisipkan item, Anda bisa menjalankan kueri untuk mendapatkan semua item yang cocok dengan filter tertentu dengan menganggap koleksi sebagai IQueryable. Contoh ini menggunakan ekspresi untuk memfilter produk menurut kategori. Setelah panggilan ke AsQueryable dilakukan, panggil MongoQueryable.Where untuk mengambil sekumpulan item yang difilter.

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

Menjalankan kode

Aplikasi ini membuat database dan koleksi API Azure Cosmos DB MongoDb. Contohnya kemudian membuat item lalu membaca kembali item yang sama persis. Terakhir, contoh membuat item kedua lalu melakukan kueri yang harus mengembalikan beberapa item. Dengan setiap langkah, contoh menghasilkan metadata ke konsol tentang langkah-langkah yang telah dilakukannya.

Untuk menjalankan aplikasi, gunakan terminal untuk menavigasi ke direktori aplikasi dan menjalankannya.

dotnet run

Output aplikasi harus mirip dengan contoh ini:

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

Membersihkan sumber daya

Saat Anda tidak lagi memerlukan akun Azure Cosmos DB for MongoDB, Anda dapat menghapus grup sumber daya yang sesuai.

Untuk menghapus grup sumber daya tersebut, gunakan perintah az group delete.

az group delete --name $resourceGroupName