Lagra data i NoSQL-databaser

Slutförd

Data har inte bara formen av välstrukturerade relationsdata. Ibland måste du lagra data som inte passar i en tabell. Du kanske till exempel vill lagra ett dokument som innehåller en lista med objekt, var och en med ett annat schema. I det här fallet är en NoSQL-databas ett bättre val än en relationsdatabas. En av de mest populära NoSQL-databaserna är MongoDB.

Använda .NET Aspire MongoDB-komponenten

Samma mönster som tidigare gäller för MongoDB. Du måste konfigurera både appvärden och varje konsumerande projekt.

Konfigurering av appvärden

Installera MongoDB-värdkomponenten:

dotnet add package Aspire.Hosting.MongoDB --prerelease

Lägg sedan till den här koden i appvärdens Program.cs-fil för att registrera containern och skapa en databas:

var mongo = builder.AddMongoDB("mongo");
var mongodb = mongo.AddDatabase("mongodb");

Skicka databastjänsten till alla projekt som använder den:

var northernTradersCatalogAPI = builder.AddProject<Projects.NorthernTraders_CatalogAPI>()
                                       .WithReference(mongodb);

Konfigurera de förbrukande projekten

Du måste lägga till .NET Aspire MongoDB-komponenten i alla mikrotjänstprojekt som använder databasen. Du lägger till Aspire.MongoDB.Driver NuGet-paketet i projektet som behöver dataåtkomst med hjälp av antingen .NET CLI eller Visual Studio NuGet-pakethanteraren.

dotnet add package Aspire.MongoDB.Driver --prerelease

I filen AppHostProgram.cs registrerar du MongoDB-drivrutinen. Koden kan till exempel se ut så här:

var mongoDB = builder.AddMongoDB("mongo")
                     .WithMongoExpress()
                     .AddDatabase("BasketDB");

var myService = builder.AddProject<Projects.MyService>()
                       .WithReference(mongoDB);

MongoDB-komponenten, som PostgeSQL och MySQL, tillhandahåller ett databashanteringsverktyg som heter Mongo Express. Koden ovan lägger till en container för den.

Använda en MongoDB-databas

Alla projekt i din lösning som behöver åtkomst till MongoDB-databasen måste lägga till en MongoDB-klient. Sedan använder du MongoDB-klienten för att läsa och skriva data till databasen.

builder.AddMongoDBClient("BasketDB");

Metoden AddMongoDBClient lägger till en klient i projektet. Se den här exempelkoden som använder den:

using MongoDB.Driver;
using MongoDB.Driver.Linq;

public class MongoBasketStore
{
  public async Task<CustomerBasket?> GetBasketAsync(IMongoClient mongoClient, string customerId)
  {
    var basketCollection = mongoClient.GetDatabase("BasketDB").GetCollection<CustomerBasket>("basketitems");
    var filter = Builders<CustomerBasket>.Filter.Eq(r => r.BuyerId, customerId);
  
    return await basketCollection.Find(filter).FirstOrDefaultAsync();
  }
}

Koden ovan skapar en MongoDB-samling som gör att metoden kan köra frågor mot alla CustomerBasket objekt för att hitta den med matchande BuyerId.

Konfigurera MongoDB-komponenten

Precis som de tidigare databaskomponenterna stöder MongoDB-komponenten .NET Aspires tjänstidentifiering och beroendeinmatning. Så om du använder samma databasnamn som definierats i AppHost och projekt behöver du inte hantera anslutningssträngar. Men om du redan använder en befintlig MongoDB-databas som inte hanteras av .NET Aspire kan du konfigurera den på andra sätt.

Använda en anslutningssträng

I dina projekt appsettings.json fil lägger du till en anslutningssträng i MongoDB-databasen. Till exempel:

{
  ...
  "ConnectionStrings": {
    "MongoConnectionString": "mongodb://localhost:27017/test",
  }
}

Den tidigare anslutningssträngen lägger till stöd för en databas med namnet test på en lokal MongoDB-databasserver som lyssnar på port 27017. Du använder den här anslutningssträngen i din Program.cs-fil när du skapar MongoDB-klienten:

builder.AddMongoDBClient("MongoConnectionString");

Andra alternativ

Taggen för Microsoft.Extensions.Configuration versionen av MongoDB är Aspire:MongoDB:Driver. Så du kan ansluta till en MongoDB-databas med hjälp av följande JSON-konfiguration:

{
  "Aspire": {
    "MongoDB": {
      "Driver": {
        "ConnectionString": "mongodb://localhost:27017/test",
        "HealthChecks": true,
        "HealthCheckTimeout": 10000,
        "Tracing": true
      },
    }
  }
}

Med den tidigare konfigurationen behöver du inte längre lägga till anslutningssträngen. Använd bara builder.AddMongoDBClient();.

Det sista alternativet är att konfigurera anslutningen i kod med infogade konfigurationer. Till exempel:

builder.AddMongoDBClient("mongodb", static settings => 
  { 
    settings.ConnectionString = "mongodb://localhost:27017/test"; 
    settings.HealthChecks = true; 
  });