Snabbstart: Azure Cosmos DB för MongoDB för .NET med MongoDB-drivrutinen

GÄLLER FÖR: Mongodb

Kom igång med MongoDB för att skapa databaser, samlingar och dokument i din Azure Cosmos DB-resurs. Följ de här stegen för att distribuera en minimal lösning till din miljö med hjälp av Azure Developer CLI.

API för MongoDB-referensdokumentation | MongoDB-paket (NuGet) /Microsoft.Azure.Cosmos) | Azure Developer CLI

Förutsättningar

Konfigurera

Distribuera projektets utvecklingscontainer till din miljö. Använd sedan Azure Developer CLI (azd) för att skapa ett Azure Cosmos DB för MongoDB-konto och distribuera ett containerbaserat exempelprogram. Exempelprogrammet använder klientbiblioteket för att hantera, skapa, läsa och fråga efter exempeldata.

Öppna i GitHub Codespaces

Öppna i Dev Container

Viktigt!

GitHub-konton innehåller en berättigande till lagring och kärntimmar utan kostnad. Mer information finns i inkluderade lagrings- och kärntimmar för GitHub-konton.

  1. Öppna en terminal i projektets rotkatalog.

  2. Autentisera till Azure Developer CLI med .azd auth login Följ stegen som anges av verktyget för att autentisera till CLI med dina önskade Azure-autentiseringsuppgifter.

    azd auth login
    
  3. Använd azd init för att initiera projektet.

    azd init
    
  4. Under initieringen konfigurerar du ett unikt miljönamn.

    Dricks

    Miljönamnet används också som målresursgruppnamn. För den här snabbstarten bör du överväga att använda msdocs-cosmos-db-.

  5. Distribuera Azure Cosmos DB-kontot med .azd up Bicep-mallarna distribuerar också ett exempelwebbprogram.

    azd up
    
  6. Under etableringsprocessen väljer du din prenumeration och önskad plats. Vänta tills etableringsprocessen har slutförts. Processen kan ta ungefär fem minuter.

  7. När etableringen av dina Azure-resurser är klar inkluderas en URL till det webbprogram som körs i utdata.

    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. Använd URL:en i konsolen för att navigera till webbprogrammet i webbläsaren. Observera utdata från appen som körs.

    Skärmbild av webbprogrammet som körs.


Installera klientbiblioteket

Klientbiblioteket är tillgängligt via NuGet som Microsoft.Azure.Cosmos paket.

  1. Öppna en terminal och navigera till /src/web mappen.

    cd ./src/web
    
  2. Om det inte redan är installerat installerar du MongoDb.Driver paketet med .dotnet add package

    dotnet add package MongoDb.Driver
    
  3. Installera även paketet om det Azure.Identity inte redan är installerat.

    dotnet add package Azure.Identity
    

Objektmodell

Innan du börjar skapa programmet ska vi titta på resurshierarkin i Azure Cosmos DB. Azure Cosmos DB har en specifik objektmodell som används för att skapa och komma åt resurser. Azure Cosmos DB skapar resurser i en hierarki som består av konton, databaser, samlingar och dokument.

Diagram över Azure Cosmos DB-hierarkin, inklusive konton, databaser, samlingar och dokument.

Hierarkiskt diagram som visar ett Azure Cosmos DB-konto högst upp. Kontot har två underordnade databasskärvor. En av databasskärvorna innehåller två underordnade samlingsshards. Den andra databassharden innehåller en enda underordnad samlingsshard. Den enda samlingssharden har tre underordnade dokumentskärvor.

Du använder följande MongoDB-klasser för att interagera med dessa resurser:

  • MongoClient – Den här klassen ger en logisk representation på klientsidan för API:et för MongoDB-lagret i Azure Cosmos DB. Klientobjektet används för att konfigurera och köra begäranden mot tjänsten.
  • MongoDatabase – Den här klassen är en referens till en databas som kanske, eller kanske inte finns i tjänsten ännu. Databasen verifieras på serversidan när du försöker komma åt den eller utföra en åtgärd mot den.
  • Collection – Den här klassen är en referens till en samling som kanske inte heller finns i tjänsten ännu. Samlingen verifieras på serversidan när du försöker arbeta med den.

Kodexempel

Exempelkoden som visas i den här artikeln skapar en databas med namnet adventureworks med en samling med namnet products. Samlingen products är utformad för att innehålla produktinformation som namn, kategori, kvantitet och en försäljningsindikator. Varje produkt innehåller också en unik identifierare.

Autentisera klienten

Öppna filen Program.cs från projektkatalogen. I redigeringsprogrammet lägger du till ett användningsdirektiv för MongoDB.Driver.

using MongoDB.Driver;

Definiera en ny instans av MongoClient klassen med konstruktorn och Environment.GetEnvironmentVariable för att läsa anslutningssträng du angav tidigare.

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

Skapa en -databas

MongoClient.GetDatabase Använd metoden för att skapa en ny databas om den inte redan finns. Den här metoden returnerar en referens till den befintliga eller nyligen skapade databasen.

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

Skapa en samling

Skapar MongoDatabase.GetCollection en ny samling om den inte redan finns och returnerar en referens till samlingen.

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

Skapa ett objekt

Det enklaste sättet att skapa ett nytt objekt i en samling är att skapa en C#- klass eller posttyp med alla medlemmar som du vill serialisera till JSON. I det här exemplet har C#-posten en unik identifierare, ett kategorifält för partitionsnyckeln och extra namn, kvantitet och försäljningsfält .

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

Skapa ett objekt i samlingen med posten Product genom att anropa 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
));

Hämta ett objekt

I Azure Cosmos DB kan du hämta objekt genom att skriva frågor med linq. I SDK anropar IMongoCollection.FindAsync<> och skickar du ett C#-uttryck för att filtrera resultatet.

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

Frågeobjekt

När du har infogat ett objekt kan du köra en fråga för att hämta alla objekt som matchar ett specifikt filter genom att behandla samlingen som en IQueryable. I det här exemplet används ett uttryck för att filtrera produkter efter kategori. När anropet till AsQueryable har gjorts anropar du MongoQueryable.Where för att hämta en uppsättning filtrerade objekt.

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

Kör koden

Den här appen skapar en Azure Cosmos DB MongoDb API-databas och samling. Exemplet skapar sedan ett objekt och läser sedan exakt samma objekt tillbaka. Slutligen skapar exemplet ett andra objekt och utför sedan en fråga som ska returnera flera objekt. Med varje steg matar exemplet ut metadata till konsolen om de steg som den har utfört.

Om du vill köra appen använder du en terminal för att navigera till programkatalogen och köra programmet.

dotnet run

Utdata från appen bör likna det här exemplet:

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

Rensa resurser

När du inte längre behöver Azure Cosmos DB för MongoDB-kontot kan du ta bort motsvarande resursgrupp.

az group delete Använd kommandot för att ta bort resursgruppen.

az group delete --name $resourceGroupName