Archiviare i dati nei database NoSQL

Completato

I dati non hanno solo la forma di dati relazionali ben strutturati. In alcuni casi, è necessario archiviare i dati che non si adattano perfettamente a una tabella. Ad esempio, è possibile archiviare un documento contenente un elenco di elementi, ognuno con uno schema diverso. In questo caso, un database NoSQL è una scelta migliore rispetto a un database relazionale. Uno dei database NoSQL più diffusi è MongoDB.

Uso del componente MongoDB .NET Aspire

Lo stesso modello di prima si applica a MongoDB. È necessario configurare sia l'host dell'app che ogni progetto che utilizza.

Configurazione dell'host dell'app

Installare il componente di hosting MongoDB:

dotnet add package Aspire.Hosting.MongoDB --prerelease

Quindi, nel file Program.cs dell'host dell'app aggiungere questo codice per registrare il contenitore e creare un database:

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

Passare il servizio di database a tutti i progetti che lo utilizzano:

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

Configurare i progetti che utilizzano la cache

È necessario aggiungere il componente MongoDB .NET Aspire a qualsiasi progetto di microservizio che usa il database. È possibile aggiungere il pacchetto NuGet Aspire.MongoDB.Driver al progetto che richiede l'accesso ai dati, usando l'interfaccia della riga di comando di .NET o la gestione pacchetti NuGet di Visual Studio.

dotnet add package Aspire.MongoDB.Driver --prerelease

Nel file AppHost Program.cs, registrare il driver MongoDB. Ad esempio, il codice potrebbe essere simile al seguente:

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

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

Il componente MongoDB, ad esempio PostgeSQL e MySQL, fornisce uno strumento di gestione del database denominato Mongo Express. Il codice precedente aggiunge un contenitore.

Uso di un database MongoDB

Tutti i progetti nella soluzione che devono accedere al database MongoDB devono aggiungere un client MongoDB. Si usa quindi il client MongoDB per leggere e scrivere dati nel database.

builder.AddMongoDBClient("BasketDB");

Il metodo AddMongoDBClient aggiunge un client al progetto. Vedere questo codice di esempio che lo usa:

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

Il codice precedente crea una raccolta MongoDB che consente al metodo di eseguire query su tutti gli oggetti CustomerBasket per trovare quello con la corrispondenza BuyerId.

Configurazione del componente MongoDB

Come i componenti di database precedenti, il componente MongoDB supporta l'individuazione del servizio e l'inserimento delle dipendenze di .NET Aspire. Pertanto, se si usa lo stesso nome di database definito in AppHost e nei progetti, non è necessario gestire le stringhe di connessione. Tuttavia, se si usa già un database MongoDB esistente non gestito da .NET Aspire, è possibile configurarlo in altri modi.

Uso di una stringa di connessione

Nel file appsettings.json dei progetti, aggiungere una stringa di connessione al database MongoDB. Ad esempio:

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

La stringa di connessione precedente aggiunge il supporto per un database denominato test in un server di database MongoDB locale in ascolto sulla porta 27017. Questa stringa di connessione viene usata nel file Program.cs quando si crea il client MongoDB:

builder.AddMongoDBClient("MongoConnectionString");

Altre opzioni

Il tag per la versione Microsoft.Extensions.Configuration di MongoDB è Aspire:MongoDB:Driver. È quindi possibile connettersi a un database MongoDB usando la configurazione JSON seguente:

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

Con la configurazione precedente non è più necessario aggiungere la stringa di connessione, è sufficiente usare builder.AddMongoDBClient();.

L'opzione finale consiste nel configurare la connessione nel codice, con configurazioni inline. Ad esempio:

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