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
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Akun GitHub
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Azure Developer CLI
- Desktop Docker
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.
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.
Buka terminal di direktori akar proyek.
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
Gunakan
azd init
untuk menginisialisasi proyek.azd init --template cosmos-db-mongodb-dotnet-quickstart
Catatan
Mulai cepat ini menggunakan repositori GitHub azure-samples/cosmos-db-mongodb-dotnet-quickstart . Azure Developer CLI akan secara otomatis mengkloning proyek ini ke komputer Anda jika belum ada.
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
.Sebarkan akun Azure Cosmos DB menggunakan
azd up
. Templat Bicep juga menyebarkan aplikasi web sampel.azd up
Selama proses provisi, pilih langganan dan lokasi yang Anda inginkan. Tunggu hingga proses provisi selesai. Prosesnya dapat memakan waktu sekitar lima menit.
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.
Gunakan URL di konsol untuk menavigasi ke aplikasi web Anda di browser. Amati output aplikasi yang sedang berjalan.
Memasang pustaka klien
Pustaka klien tersedia melalui NuGet, sebagai Microsoft.Azure.Cosmos
paket.
Buka terminal dan navigasi ke
/src/web
folder .cd ./src/web
Jika belum diinstal, instal
MongoDb.Driver
paket menggunakandotnet add package
.dotnet add package MongoDb.Driver
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 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 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 juga mungkin 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 MongoClient
baru kelas menggunakan konstruktor, dan Environment.GetEnvironmentVariable
untuk membaca string koneksi yang ditetapkan oleh Azure Developer CLI 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 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
membuat MongoDatabase.GetCollection
koleksi baru jika belum ada dan 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 dilakukan.
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